Keras似乎在训练期间报告了不正确的val损失。当我训练模型时,它报告的MS MSE损失约为0.88。当我立即重新加载模型并在完全相同的验证集上运行.predict方法时,我得到的MS MSE损失大约为1.2。我检查了重量以确保训练后模型与重新加载的模型相同。有谁知道可能会发生什么?谢谢!
代码:
training_data = data[:10000]
training_norm_factor = np.std(training_data)
training_mean = np.mean(training_data)
training_inputs = training_data[:,:-1].reshape((-1, look_back, 1))
training_inputs = (training_inputs - training_mean)/training_norm_factor
training_labels = (training_data[:,-1] - training_mean)/training_norm_factor
val_data = data[10000:]
val_inputs = val_data[:, :-1].reshape((-1, look_back, 1))
val_inputs = (val_inputs - training_mean)/training_norm_factor
val_labels = (val_data[:,-1] - training_mean)/training_norm_factor
# Build Model
model = Sequential()
model.add(layers.GRU(256, input_shape=(5, 1), return_sequences=True,
kernel_regularizer=regularizers.l2(0.01)))
model.add(layers.GRU(256, kernel_regularizer=regularizers.l2(0.01)))
model.add(layers.Dense(256, activation='relu',
kernel_regularizer=regularizers.l2(0.01)))
model.add(layers.Dense(1))
# Compile and Train
model.summary()
model.compile(optimizer=RMSprop(lr=1e-3, clipnorm=1.),
loss='mean_squared_error',
)
callbacks_list = [
K.callbacks.EarlyStopping(monitor='val_loss', mode='min', patience=0), K.callbacks.ModelCheckpoint('/Users/rickblickstead/Documents/GitHub/Volatility-
Forecasting/MyModel.5df5',
monitor='val_loss', verbose=1, save_best_only=True,
mode='min', period=1)
]
history = model.fit(training_inputs[:, -5:], training_labels,
epochs=8,
batch_size=256,
shuffle=True,
callbacks=callbacks_list,
validation_data = (val_inputs[:, -5:], val_labels)
)
# Re-Test validation set
best_model = load_model('MyModel.5df5')
best_predictions = best_model.predict(val_inputs[:, -5:], batch_size=256, verbose=0)
print np.mean((best_predictions-val_labels)**2)
答案 0 :(得分:0)
train()
函数显示训练期间训练批次中的当前损失,并在给定时期的所有批次中显示平均值损失时代。
如果要获得准确的损失,可以将validation_data=(X, Y)
参数传递给model.fit()
函数。
这是区别:
10000/10000 [==============================] - 0s 5us/step - loss: 0.9963 - val_loss: 0.9956
loss: 0.9963
是所有时期的损失平均值;
lost: 0.9956
是为相同整个训练集计算的损失值