TensorFlow/Keras 拆分训练和验证数据
TensorFlow / Keras splitting training and validation data
我正在学习如何使用 TensorFlow,并获得了一个构建在 Keras 结构中的工作模型。它运行但结果对我来说有点神秘。我试图复制它并将其简化为它的本质,然后再次构建它。我完全无法理解的部分是 how/where 它将训练数据输入拆分为训练集和验证集?我检查了模型代码、初始参数等。TensorFlow 卷积神经网络中是否有自动执行此操作的内置函数?
对 Talos 的调用如下所示,前两个值是 x-training 和 y-training 值,没有任何地方 x_val
或 y_val
传递给 Talos 函数。 Talos 可以自动生成 x_val
和 y_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
参数,这是要使用的训练数据的分数作为验证数据.. default,它被设置为 0.0.
更新 1:检查来源 code of talos.Scan
, it uses a validation_split
of 0.3 by default. Also, check this。那么它应该是 self-explanatory.
我正在学习如何使用 TensorFlow,并获得了一个构建在 Keras 结构中的工作模型。它运行但结果对我来说有点神秘。我试图复制它并将其简化为它的本质,然后再次构建它。我完全无法理解的部分是 how/where 它将训练数据输入拆分为训练集和验证集?我检查了模型代码、初始参数等。TensorFlow 卷积神经网络中是否有自动执行此操作的内置函数?
对 Talos 的调用如下所示,前两个值是 x-training 和 y-training 值,没有任何地方 x_val
或 y_val
传递给 Talos 函数。 Talos 可以自动生成 x_val
和 y_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
参数,这是要使用的训练数据的分数作为验证数据.. default,它被设置为 0.0.
更新 1:检查来源 code of talos.Scan
, it uses a validation_split
of 0.3 by default. Also, check this。那么它应该是 self-explanatory.