验证数据与训练数据 TensorFlow 2 分开?
Validation data separate from training data TensorFlow 2?
如下所示使用 TensorFlow 2 训练模型时,验证数据是否应该在传递给模型的 fit
方法之前与训练数据分开,还是可以作为训练集的一部分?在下面代码的末尾显示两个选项。我相信选项 1 是正确的,但正如我看到一些使用选项 2 的来源一样,我想确保我理解正确。
X_train, X_test, y_train, y_test = train_test_split(df_x, series_y)
best_weight_path = 'best_weights.hdf5'
numpy_x = df_x.to_numpy()
numpy_y = series_y.to_numpy()
numpy_x_train = X_train.to_numpy()
numpy_y_train = y_train.to_numpy()
numpy_x_test = X_test.to_numpy()
numpy_y_test = y_test.to_numpy()
model = Sequential()
model.add(Dense(32, input_dim=x.shape[1], activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=5, verbose=1, mode='auto')
checkpointer = ModelCheckpoint(filepath=best_weight_path, verbose=0, save_best_only=True)
选项 1
model.fit(numpy_x_train, numpy_y_train, validation_data=(numpy_x_test, numpy_y_test), callbacks=[monitor, checkpointer], verbose=0, epochs=1000)
选项 2
model.fit(numpy_x, numpy_y, validation_data=(numpy_x_test, numpy_y_test), callbacks=[monitor, checkpointer], verbose=0, epochs=1000)
第一个选项是正确的...您在数据之前拆分并使用您的火车在 test/valid
上进行拟合和评估
第二个选项否...您将所有数据用于训练,同时将其中的一部分传递给评估。 Keras 并没有那么聪明地理解这一点。但要实现你在第二个选项中寻找的东西,你只需要 validation_split = 0.xxx
model.fit(numpy_x, numpy_y, validation_split=0.xxx, callbacks=[monitor, checkpointer], verbose=0, epochs=1000)
换句话说,你传递你所有的数据,然后 Keras 使用 evaluation/testing
的 0.xxx % 随机分割它们
如下所示使用 TensorFlow 2 训练模型时,验证数据是否应该在传递给模型的 fit
方法之前与训练数据分开,还是可以作为训练集的一部分?在下面代码的末尾显示两个选项。我相信选项 1 是正确的,但正如我看到一些使用选项 2 的来源一样,我想确保我理解正确。
X_train, X_test, y_train, y_test = train_test_split(df_x, series_y)
best_weight_path = 'best_weights.hdf5'
numpy_x = df_x.to_numpy()
numpy_y = series_y.to_numpy()
numpy_x_train = X_train.to_numpy()
numpy_y_train = y_train.to_numpy()
numpy_x_test = X_test.to_numpy()
numpy_y_test = y_test.to_numpy()
model = Sequential()
model.add(Dense(32, input_dim=x.shape[1], activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=5, verbose=1, mode='auto')
checkpointer = ModelCheckpoint(filepath=best_weight_path, verbose=0, save_best_only=True)
选项 1
model.fit(numpy_x_train, numpy_y_train, validation_data=(numpy_x_test, numpy_y_test), callbacks=[monitor, checkpointer], verbose=0, epochs=1000)
选项 2
model.fit(numpy_x, numpy_y, validation_data=(numpy_x_test, numpy_y_test), callbacks=[monitor, checkpointer], verbose=0, epochs=1000)
第一个选项是正确的...您在数据之前拆分并使用您的火车在 test/valid
上进行拟合和评估第二个选项否...您将所有数据用于训练,同时将其中的一部分传递给评估。 Keras 并没有那么聪明地理解这一点。但要实现你在第二个选项中寻找的东西,你只需要 validation_split = 0.xxx
model.fit(numpy_x, numpy_y, validation_split=0.xxx, callbacks=[monitor, checkpointer], verbose=0, epochs=1000)
换句话说,你传递你所有的数据,然后 Keras 使用 evaluation/testing
的 0.xxx % 随机分割它们