有人可以向我解释为什么自动编码器没有收敛?对我来说,下面两个网络的结果应该是相同的.但是,下面的自动编码器不会收敛,而下面的网络则是收敛的.
# autoencoder implementation, does not converge
autoencoder = Sequential()
encoder = containers.Sequential([Dense(32,16,activation='tanh')])
decoder = containers.Sequential([Dense(16,32)])
autoencoder.add(AutoEncoder(encoder=encoder, decoder=decoder,
output_reconstruction=True))
rms = RMSprop()
autoencoder.compile(loss='mean_squared_error', optimizer=rms)
autoencoder.fit(trainData,trainData, nb_epoch=20, batch_size=64,
validation_data=(testData, testData), show_accuracy=False)
Run Code Online (Sandbox Code Playgroud)
# non-autoencoder implementation, converges
model = Sequential()
model.add(Dense(32,16,activation='tanh'))
model.add(Dense(16,32))
model.compile(loss='mean_squared_error', optimizer=rms)
model.fit(trainData,trainData, nb_epoch=numEpochs, batch_size=batch_size,
validation_data=(testData, testData), show_accuracy=False)
Run Code Online (Sandbox Code Playgroud) 我有一个这样的测试:
@pytest.mark.parametrize("dtype", (float32, bfloat16))
class TestA:
def setup_method(self, method=None, dtype=float32):
if dtype == float32:
self.a = 10
else
self.a = 5
def test1(self, dtype):
...
Run Code Online (Sandbox Code Playgroud)
test1 始终使用self.a = 10,即使数据类型为 bfloat16 也是如此。有谁知道如何让它以正确的值运行?