我正在开发一个LSTM模型,希望能够保存模型并在以后随着数据的积累继续训练。我的问题是,当我保存模型并在下一次运行脚本时重新加载它时,预测结果完全错误,只是模仿了我输入的数据。
以下是模型的初始化代码:
以下是模型的初始化代码:
# create and fit the LSTM network
if retrain == 1:
print "Creating a newly retrained network."
model = Sequential()
model.add(LSTM(inputDimension, input_shape=(1, inputDimension)))
model.add(Dense(inputDimension, activation='relu'))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)
model.save("model.{}.h5".format(interval))
else:
print "Using an existing network."
model = load_model("model.{}.h5".format(interval))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)
model.save("model.{}.h5".format(interval))
del model
model = load_model("model.{}.h5".format(interval))
model.compile(loss='mean_squared_error', optimizer='adam')
当retrain设置为1时,第一个数据集约有10,000个条目,大约有3k个epoch和5%的批量大小。第二个数据集是单个条目数据,即一行,同样具有3k个epochs和batch_size = 1。
已解决
我错误地重新加载了缩放器:
scaler = joblib.load('scaler.{}.data'.format(interval))
dataset = scaler.fit_transform(dataset)
正确:
scaler = joblib.load('scaler.{}.data'.format(interval))
dataset = scaler.transform(dataset)
fit_transform重新计算了经缩放后数值的乘数,这意味着与原始数据存在偏差。