Проблема с моделью VAE — несовместимость KerasTensor с функциями TensorFlowPython

Программы на Python
Ответить
Anonymous
 Проблема с моделью VAE — несовместимость KerasTensor с функциями TensorFlow

Сообщение Anonymous »

Spark версии 3.4.0

Python 3.9.16

tensorflow 2.17.0

Я столкнулся с проблема при построении модели VAE (вариационный автоэнкодер) с использованием следующей конфигурации: я выполняю эту работу в рамках вменения данных о мошенничестве

Код: Выделить всё

Input dimension: 250
Latent dimension: 32
Имя метода: build_vae_model
Эта ошибка произошла при вызове build_vae_model в модуле impute_data_vae, что привело к сбою со следующим описанием ошибки:
Ошибка:

Код: Выделить всё

A KerasTensor cannot be used as input to a TensorFlow function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces `keras.layers` and `keras.operations`). You are likely doing something like:

```

x = Input(...)

...

tf_fn(x)  # Invalid.

```

What you should do instead is wrap `tf_fn` in a layer:

```
class MyLayer(Layer):

def call(self, x):

return tf_fn(x)
x = MyLayer()(x)
```
В качестве следующего шага я настрою метод build_vae_model, чтобы обернуть функцию(и) TensorFlow внутри соответствующих слоев Keras. Это отнимает очень много времени. Если кто-то сталкивался с подобной проблемой или имеет рекомендации по ее решению, я буду признателен.
Дальнейшее расследование
Вызвана ошибка. путем прямого применения операций TensorFlow (tf.shape и tf.random.normal) к тензорам Keras (z_mean, z_log_var), что Keras не позволяет. Решение, как указано в сообщении об ошибке, состоит в инкапсуляции этих операций внутри слоя Keras. Я реализовал собственный слой выборки следующим образом:

Код: Выделить всё

from tensorflow.keras.layers import Layer

class Sampling(Layer):
def call(self, inputs):
z_mean, z_log_var = inputs
batch = tf.shape(z_mean)[0]
dim = tf.shape(z_mean)[1]
epsilon = tf.random.normal(shape=(batch, dim))
return z_mean + tf.exp(0.5 * z_log_var) * epsilon
Затем я интегрировал этот слой в модель VAE для выполнения выборки. Этот подход устранил ошибку, поскольку гарантирует, что операции являются частью конвейера модели Keras.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»