首页 文章

训练期间Keras的Val损失不正确

提问于
浏览
1

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)

1 回答

  • 0

    train() 函数显示训练期间训练批次的 current 损失以及在该时期结束时给定历元的所有批次的损失 mean .

    如果您想获得准确的损失,可以将 validation_data=(X, Y) param传递给 model.fit() 函数 .

    区别在于: 10000/10000 [==============================] - 0s 5us/step - loss: 0.9963 - val_loss: 0.9956

    loss: 0.9963 是该时期所有批次的损失平均值;
    lost: 0.9956 是为 same 整个训练集计算的丢失值

相关问题