我的数据集很少,我已经在最大的数据集上训练过模型,现在想看看它将如何预测不同数据集的值。为了保存模型,我在参数ModelCheckpoint
中使用了save_weights_only=True
回调,后来又添加了行model.save(...)
。现在,我想使用此模型对另一个数据集进行预测-如何正确执行此操作?我最担心的是,在训练之前,我已经将“参考”数据集的样本数量进行了调整,因此它可以预测X个样本,并且我不确定当尝试{{1 }}对于另一组数据-它会预测整个数据集还是仅预测移位值的数量?我的第二个问题是:使用权重为model.predict()
的完整模型(意味着-删除ModelCheckpoint
参数)保存是否更合理,或者我当前的方法是否正确?
我正在使用Tensorflow 1.14。
我正在遵循Hvass Labs关于RRN时间序列预测的教程,我的代码如下:
save_weights_only=True
然后我声明了模型:
df =pd.read_json(f'dataset1.json')
input_data = self.df.values[0:-10]
output_data = self.df.values[:-10]
num_data = len(input_data)
num_train = int(0.9 * num_data)
num_test = num_data - num_train
input_train = x_data[0:num_train]
input_test = x_data[num_train:]
output_train = y_data[0:num_train]
output_test = y_data[num_train:]
num_input_signals = input_data.shape[1]
num_output_signals = output_data.shape[1]
正如您所看到的,我将数据移了10个样本,因此在输出数据帧中,最后10行显示NaN,据我所知Tensorflow,以下代码应预测10个样本的值,稍后我想使用此训练有素的模型对另一个数据集进行预测-是否意味着它也会预测最后10个样本,还是对整个数据集进行预测?我的“参考”数据集如下所示:
model = Sequential()
model.add(LSTM(units=512,
return_sequences=True,
input_shape=(None, num_input_signals,)))
model.add(Dense(
num_output_signals,
activation='relu'))
def __batch_generator(self, batch_size, sequence_length, input_train, output_train):
while True:
x_shape = (batch_size, sequence_length,num_input_signals)
x_batch = np.zeros(shape=x_shape, dtype=np.float16)
y_shape = (batch_size, sequence_length,num_output_signals)
y_batch = np.zeros(shape=y_shape, dtype=np.float16)
for i in range(batch_size):
idx = np.random.randint(num_train - sequence_length)
x_batch[i] = input_train[idx:idx + sequence_length]
y_batch[i] = output_train[idx:idx + sequence_length]
yield (x_batch, y_batch)
validation_data = np.expand_dims(input_test, axis=0), np.expand_dims(output_test, axis=0)
optimizer = RMSprop(lr=0.001)
generator = self.__batch_generator(256, 168, input_train, output_train)
model.compile(loss='mean_squared_error', optimizer='adam')
callback_checkpoint = ModelCheckpoint(filepath=f'model',
monitor='val_loss',
verbose=1,
save_weights_only=True,
save_best_only=True)
model.fit_generator(generator=generator,
epochs=100,
steps_per_epoch=100,
validation_data=validation_data,
callbacks=[callback_checkpoint])
model.predict(input_train)
model.save('dataset1-model.h5')
另外一个具有较少的余弦函数样本(100k和10k)。在加载模型时,我想使用[
{
"timestamp": "2019-02-11 08:00:00",
"sine": -0.5877852522924633
},
{
"timestamp": "2019-02-11 09:00:00",
"sine": -0.809016994374933
},
{
"timestamp": "2019-02-11 10:00:00",
"sine": -0.9510565162951421
}
]
。
最后,在给定10k数据集的情况下,用在100k数据集上训练的模型进行的预测是否会比在10k数据集上训练的模型进行的预测差?由于第一个模型是在更大的数据集上进行训练的,所以我认为在预测期间,它将期望有类似数量的数据可以正确预测,对吗?