TensorFlow/Keras分割训练和验证数据



我正在学习如何使用TensorFlow,并获得了一个构建在Keras结构中的工作模型。它运行了,但结果对我来说有点神秘。我正试图复制它,并将其简化为它的本质,然后重新构建它。我完全不能理解的部分是它如何/在哪里将输入的训练数据拆分为训练和验证集?我已经检查了模型代码、初始参数等。TensorFlow卷积神经网络中是否有一个内置功能可以自动做到这一点?

对Talos的调用看起来是这样的,前两个值是x-training和y-training值,没有传递给Talos函数的x_valy_val。Talos能自动生产x_valy_val吗?

jam1 = talos.Scan(features3,
label2[0,],
model = DLAt,
params = ParamsJam1,
experiment_name = "toy1",
fraction_limit=.2)
def DLAt(x_train, y_train, x_val, y_val, params):
model = Sequential()
convLayer = Conv1D(filters=params['numFilters'],
kernel_size=params['kernalLen'], strides=1, activation='relu',
input_shape=(300,4), use_bias=True)
model.add(convLayer)
model.add(MaxPooling1D(pool_size=params['maxpool']))
model.add(Flatten())
firstHidden = Dense(params['neuronsInLayerOne'], activation='relu',
kernel_regularizer=regularizers.l1_l2(l1=params['l1'], l2=0))
model.add(firstHidden)
model.add(Dropout(params['dropoutLevel']))
model.add(Dense(params['neuronsInLayerTwo'], activation='relu'))
model.add(Dropout(params['dropoutLevel']))
model.add(Dense(1, activation='sigmoid')) 
opt = keras.optimizers.Adam(lr=params['lr'])
model.compile(optimizer = opt, loss = 'loss', metrics = ['mse'])
out = model.fit(x_train, y_train, epochs = params['epoch'],
batch_size =params['batches'],
validation_data =(x_val,  y_val))
return out, model

它根本没有分割训练数据,而是通过参数validation_data:显式地将验证数据传递给model.fit

out = model.fit(x_train, y_train, epochs = params['epoch'],
batch_size =params['batches'],
validation_data =(x_val,  y_val))

如果要拆分训练数据而不想提供验证数据,可以在model.fit(...)中使用validation_split参数,该参数是要用作验证数据的训练数据的分数。。默认情况下,它设置为0.0。

更新1:检查talos.Scan的源代码,默认使用0.3的validation_split。此外,请检查此项。那么它应该是不言自明的。

最新更新