使用训练有素的Tensorflow模型在不同的数据集上进行预测

时间:2020-01-10 17:58:42

标签: python tensorflow machine-learning

我的数据集很少,我已经在最大的数据集上训练过模型,现在想看看它将如何预测不同数据集的值。为了保存模型,我在参数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数据集上训练的模型进行的预测差?由于第一个模型是在更大的数据集上进行训练的,所以我认为在预测期间,它将期望有类似数量的数据可以正确预测,对吗?

0 个答案:

没有答案