加载的Keras模型预测输出NaN值

时间:2020-07-05 07:13:54

标签: python keras lstm prediction

上下文

我对ANN的整个概念还是陌生的,并且只涉足Python几周了。但是,我很想利用该实践来积累对这一主题的经验和理解。

我目前正在为多变量,多步骤LSTM Keras模型开发一个单独的“预测” python文件。原始模型运行良好,并且在针对测试集进行测试时可以提供准确的预测。

但是,将模型加载到单独的“预测” python文件中以预测新数据时,预测会返回NaN值数组。有问题的代码如下:

def forecast(model, input_seq, n_input):
data = np.array(input_seq)
input_x = data[-n_input:, 0]
input_x = input_x.reshape((1, len(input_x), 1))
yhat = model.predict(input_x, verbose=0)
yhat = yhat[0]
return yhat

lstm_model = load_model('lstm_model')
n_input = 365
data = pd.read_csv('data.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
data = data.head(365)
data = data.values
scaler, data_scaled = scale(data) # MinMaxScaler with range of 0-1
history = [x for x in data_scaled]
predictions = list()
for i in range(len(data_scaled)):
    yhat_sequence = forecast(lstm_model, input_seq, n_input)
    predictions.append(yhat_sequence)
    history.append(data_scaled[i, :])
predictions = np.array(predictions)

该问题专门发生在:

yhat = model.predict(input_x, verbose=0)

其中nan值的输出为:

[[nan nan nan nan nan nan nan]]

变量input_x的输出给出了标准化的输入序列值的数组。

LSTM模型是这样构建的:

def build_model(train, n_input):
train_x, train_y = to_supervised(train, n_input)
verbose, epochs, batch_size = 0, 1, 1
n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]
model = Sequential()
model.add(LSTM(200, activation='relu', input_shape=(n_timesteps, n_features)))
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs))
model.compile(loss='mse', optimizer='adam')
model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, verbose=verbose)
model.save('lstm_model')
return model

问题

如何使用model.predict解决问题?即问题出在加载的模型上还是与单独的“预测”文件的编码方式有关?

0 个答案:

没有答案