我在嘗試為變分自動編碼器撰寫編碼器模型時遇到以下錯誤:
ValueError: Output tensors of a Functional model must be the output of a TensorFlow `Layer` (thus holding past layer metadata). Found: [[-0.02135764 -0.01809833 0.00880998 ... -0.02307652 0.00028993 0.00441882]...
下面是我的代碼的簡化版本。問題似乎來自 x 的型別,顯然是 <class 'tensorflow.python.framework.ops.EagerTensor'>.
def encoder(inputs, latent_dim):
encoder_inputs = tf.keras.Input(shape=(None, 248, 40, 1), name="input_layer")
x = tf.keras.layers.ZeroPadding2D(padding=(3, 0))(inputs)
x = tf.keras.layers.Conv2D(32, (9, 1), strides=(5, 1), batch_size=batch_size)(x)
model = tf.keras.Model(encoder_inputs, x, name="encoder")
return model
我嘗試使用 outputx.output而不是簡單地創建模型x,但 EagerTensors 沒有這樣的屬性。:( 我做錯了什么?提前謝謝。
一些額外的代碼來提供更多的背景關系。我按如下方式呼叫該函式,其中 X_train 是一個 20x248x40x1 numpy 陣列(20 個輸入,形狀為 248x40x1)。
model1 = encoder(X_train, 100)
uj5u.com熱心網友回復:
它應該是
encoder_inputs
在第一行像這里:
encoder_inputs = keras.Input(shape=(None, None, 3))
processed = keras.layers.RandomCrop(width=32, height=32)(encoder_inputs)
conv = keras.layers.Conv2D(filters=2, kernel_size=3)(processed)
pooling = keras.layers.GlobalAveragePooling2D()(conv)
feature = keras.layers.Dense(10)(pooling)
full_model = keras.Model(encoder_inputs, feature)
backbone = keras.Model(processed, conv)
activations = keras.Model(conv, feature)
或者更具體地說,它是關于你正在嘗試做的事情......你想要一個進行計算的模型,所以創建模型而不是添加東西。所以我定義了你的編碼器及其層結構
def encoder():
encoder_inputs = tf.keras.Input(shape=(None, 248, 40, 1),
name="input_layer")
x = tf.keras.layers.ZeroPadding2D(padding=(3, 0))(encoder_inputs)
x = tf.keras.layers.Conv2D(32, (9, 1), strides=(5, 1),
batch_size=batch_size)(x)
model = tf.keras.Model(encoder_inputs, x, name="encoder")
return model
然后輸入稍后像這里一樣使用,例如使用編碼器模型最小化輸入和一些目標之間的均方誤差:
inputs = your_inputs
targets = yout targets
model = encoder()
model.compile(optimizer="Adam", loss="mse", metrics=["mae", "acc"])
model.fit(inputs,targets)
更多資訊可以在tf.keras.Model找到
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493873.html
