我对TF2非常陌生,并尝试自定义tensorflow指南文档中的示例代码:
如果潜在维度设置为1,则指南中给出的代码不会运行,对于每个潜在维度>;1,它都可以正常运行!你知道吗
对于培训,我尝试使用示例中给出的代码,但将潜在dim设置为1:
vae = VariationalAutoEncoder(784, 64, 1)
optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)
vae.compile(optimizer, loss=tf.keras.losses.MeanSquaredError())
vae.fit(x_train, x_train, epochs=3, batch_size=64)
尝试训练时的错误是:
值错误:应定义输入到密集的最后一个维度。找不到 从示例函数返回时抛出
epsilon = tf.keras.backend.random_normal(shape=(batch, dim))
无法处理shape=(?,1). 你知道吗
有人可以帮助我尝试使用的代码作为模板,但我需要潜在的维度是1!你知道吗
谢谢
好的。答案来自Github的MarkDoust here
这里的问题是广播与
z_mean + tf.exp(0.5 * z_log_var) * epsilon
线路的相互作用。你知道吗通常z泳u均值和z泳u log泳u var的最后一个维数是已知的,而epsilon的最后一个维数是未知的。你知道吗
既然你把epsilon和mul相加,它就假设这两个有相同的形状。你知道吗
当它们的最后一个维度为1时,它认为你可能在用epsilon来计算zïu mean和zïu logïvar,它说不出来。你知道吗
所以解决办法是告诉它你知道epsilon的形状,而不是广播。在
z_mean + tf.exp(0.5 * z_log_var) * epsilon
行之前添加以下内容:epsilon.set_shape(z_mean.shape)
。你知道吗相关问题 更多 >
编程相关推荐