我尝试输入一个特定的标量值(0到1;每张图像都有一个潜在变量层。如何在基于CNN的自编码器序列模型中插入值?
def encoder():
model = tf.keras.Sequential()
model.add(Conv2D(12, (2,2), activation='relu', padding='same', input_shape=(32, 32, 1)))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Flatten())
model.add(Dense(64))
return model
# maybe some code here
def decoder():
model = tf.keras.Sequential()
model.add(Dense(16*16*12, input_shape=(65,)))
model.add(Reshape((16,16,12)))
model.add(Conv2D(32, (2, 2), activation='relu', padding='same'))
model.add(UpSampling2D((2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(1, (2, 2), padding='same'))
return model
编码器中潜在变量的个数为64,因此,一个标量变量在解码器中应该有65个潜在变量。可以应用连接层吗?
您可以使用一个连接层。例如:
x1 = tf.keras.layers.Dense(8)(np.arange(10).reshape(5, 2))
x2 = tf.keras.layers.Dense(8)(np.arange(10, 20).reshape(5, 2))
concatted = tf.keras.layers.Concatenate()([x1, x2])
但是你必须为你想要添加的常数选择正确的shape
。
在您的情况下,您可以使用:
...
outputs = tf.keras.layers.Concatenate()([model, your_constant])
model = tf.keras.Model(inputs=model.inputs, outputs=outputs)
return model
...
这个解决方案对你有用吗?