我正在写一篇 keras
lstm
在python中的模型。如果我有下面的 fit()
编码
for i in range(0, epochs):
model.fit(X_train, y_train, epochs=1, batch_size=32, validation_data=[X_test, y_test], shuffle=True)
我希望每个时代都是独立于前一个时代的,即每个连续的时代都没有明显的改进。然而,事实并非如此。上述代码的工作原理与写作完全相同。
model.fit(X_train, y_train, epochs=epochs, batch_size=32, validation_data=[X_test, y_test], shuffle=True)
我知道 keras
拥有 model.reset_states()
函数,但我不相信重置状态,重置权重,并在第一个代码块中独立开始一个新的纪元。那么如何 keras
保存独立的权重和其他数据 fit()
函数,如何重置它?
该 fit
功能只 更新 的权重。这就是为什么如果你叫 fit
几次,你每次都会更新权重。
正如 @Yoskutik 指出的,fit 只更新权重。
如果要在每个纪元后重设权重,你可以这样做。
import numpy as np
import tensorflow as tf # (TensorFlow version 2.2)
# build dummy model
inputs = tf.keras.layers.Input((1,))
output = tf.keras.layers.Dense(1, kernel_initializer='zeros')(inputs)
model = tf.keras.models.Model(inputs=inputs, outputs=output)
model.compile(loss='mse', optimizer='sgd')
# dummy data
X = np.arange(10)
y = np.arange(10, 20)
initial_weights = model.get_weights() # get the initial weights (in this case zeros)
for _ in range(5):
model.fit(X, y, epochs=1, verbose=0)
print('weights after one epoch of training =')
print('kernel:0 = {}'.format(np.squeeze(model.trainable_variables[0].numpy())))
print('bias:0 = {}\n'.format(np.squeeze(model.trainable_variables[1].numpy())))
model.set_weights(initial_weights) # set initial_weights after epoch is done
>> output:
weights after one epoch of training =
kernel:0 = 1.46999990940094
bias:0 = 0.28999999165534973
weights after one epoch of training =
kernel:0 = 1.46999990940094
bias:0 = 0.28999999165534973
weights after one epoch of training =
kernel:0 = 1.46999990940094
bias:0 = 0.28999999165534973
weights after one epoch of training =
kernel:0 = 1.46999990940094
bias:0 = 0.28999999165534973
weights after one epoch of training =
kernel:0 = 1.46999990940094
bias:0 = 0.2900000214576721
希望能帮到你