自定义fit_model函数训练模型时仅运行1个epoch即停止,无法完成指定的100轮训练
自定义fit_model函数训练模型时仅运行1个epoch即停止,无法完成指定的100轮训练
你遇到的问题核心是Keras的model.fit参数传递方式错误,导致epochs参数没有被正确识别,进而只执行了默认的1轮训练。
问题根源分析
先看你fit_model函数里调用model.fit的代码:
history = model.fit(X_train_sequence_tensor,Y_train_sequence_tensor, epochs, validation_data=(X_val_sequence_tensor, Y_val_sequence_tensor))
Keras的model.fit方法签名中,前三个位置参数是x、y、batch_size,而epochs是需要通过关键字参数指定的(默认值为1)。你这里把epochs作为第三个位置参数传入,相当于把你设置的100当成了batch_size,而训练轮数epochs用了默认值1,所以模型只跑1个epoch就停止了。
而你单独执行代码时,明确写了epochs=200(关键字参数),Keras能正确识别训练轮数,因此可以正常跑完所有epoch。
解决方案
修改fit_model函数中model.fit的调用,将epochs改为关键字参数传递即可:
def fit_model(model, X_train_sequence_tensor,Y_train_sequence_tensor, epochs, val_set, time_windows, scaler): X_column_list = [item for item in val_set.columns.to_list() if item not in ['date', 'user', 'rank','rank_group', 'counts', 'target']] X_val_set = val_set[X_column_list].round(2) X_val_set[X_val_set.columns] = scaler.transform(X_val_set[X_val_set.columns] ) X_val_sequence = get_feature_array(X_val_set , X_column_list, time_windows) X_val_sequence_tensor = tf.convert_to_tensor(X_val_sequence, dtype=tf.float32) Y_column_list = ['target'] Y_val_set = val_set[Y_column_list].round(2) Y_val_sequence = get_feature_array(Y_val_set , Y_column_list, time_windows) Y_val_sequence_tensor = tf.convert_to_tensor(Y_val_sequence, dtype=tf.float32) history = model.fit(X_train_sequence_tensor, Y_train_sequence_tensor, epochs=epochs, # 修正为关键字参数传递 validation_data=(X_val_sequence_tensor, Y_val_sequence_tensor)) return model, history
修改后再调用fit_model函数,传入的epochs=100就会被正确识别,模型就能完整跑完100个epoch了。
备注:内容来源于stack exchange,提问作者Carlo Allocca
相关产品推荐
相关产品推荐

