【问题标题】:What is the meaning of "validation_data will override validation_split." in keras model.fit documentation“validation_data 将覆盖validation_split”是什么意思。在 keras model.fit 文档中
【发布时间】:2019-06-28 19:25:40
【问题描述】:

我是 python 和机器学习的新手。我对 keras model.fiit 中的句子感到困惑,即“validation_data 将覆盖validation_split”。这是否意味着如果我提供这样的验证数据

history = model.fit(X_train, [train_labels_hotEncode,train_labels_hotEncode,train_labels_hotEncode],validation_data= (y_train,[test_labels_hotEncode,test_labels_hotEncode,test_labels_hotEncode]),train_labels_hotEncode]), validation_split=0.3 ,epochs=epochs, batch_size= 64, callbacks=[lr_sc])

不接受验证拆分?并且该函数只会使用 Validation_data 而不是拆分?

另外,我正在尝试在 30% 的训练数据上测试我的数据。

但是,如果我尝试使用只有 validation_split = 0.3 的 model.fit,验证准确度会变得非常糟糕。我正在为此使用 inception googleNet 架构。

loss: 1.8204 - output_loss: 1.1435 - auxilliary_output_1_loss: 1.1292 - auxilliary_output_2_loss: 1.1272 - output_acc: 0.3845 - auxilliary_output_1_acc: 0.3797 - auxilliary_output_2_acc: 0.3824 - val_loss: 9.7972 - val_output_loss: 6.6655 - val_auxilliary_output_1_loss: 5.0973 - val_auxilliary_output_2_loss: 5.3417 - val_output_acc: 0.0000e+00 - val_auxilliary_output_1_acc: 0.0000e+00 - val_auxilliary_output_2_acc: 0.0000e+00

编码 GOOGLENET

input_layer = Input(shape=(224,224,3))

image = Conv2D(64,(7,7),padding='same', strides=(2,2), activation='relu', name='conv_1_7x7/2', kernel_initializer=kernel_init, bias_initializer=bias_init)(input_layer)

image = MaxPool2D((3,3), padding='same', strides=(2,2), name='max_pool_1_3x3/2')(image)
image = Conv2D(64, (1,1), padding='same', strides=(1,1), activation='relu', name='conv_2a_3x3/1' )(image)
image = Conv2D(192, (3,3), padding='same', strides=(1,1), activation='relu', name='conv_2b_3x3/1')(image)
image = MaxPool2D((3,3), padding='same', strides=(2,2), name='max_pool_2_3x3/2')(image)

image = inception_module(image,
                    filters_1x1= 64,
                    filters_3x3_reduce= 96,
                    filter_3x3 = 128,
                    filters_5x5_reduce=16,
                    filters_5x5= 32,
                    filters_pool_proj=32,
                    name='inception_3a')

image = inception_module(image,
                            filters_1x1=128,
                            filters_3x3_reduce=128,
                            filter_3x3=192,
                            filters_5x5_reduce=32,
                            filters_5x5=96,
                            filters_pool_proj=64,
                            name='inception_3b')

image = MaxPool2D((3,3), padding='same', strides=(2,2), name='max_pool_3_3x3/2')(image)

image = inception_module(image, 
                            filters_1x1=192,
                            filters_3x3_reduce=96,
                            filter_3x3=208,
                            filters_5x5_reduce=16,
                            filters_5x5=48,
                            filters_pool_proj=64,
                            name='inception_4a')

image1 = AveragePooling2D((5,5), strides=3)(image)
image1 = Conv2D(128, (1,1), padding='same', activation='relu')(image1)
image1 = Flatten()(image1)
image1 = Dense(1024, activation='relu')(image1)
image1 = Dropout(0.4)(image1)
image1 = Dense(5, activation='softmax', name='auxilliary_output_1')(image1)

image = inception_module(image,
                            filters_1x1 = 160,
                            filters_3x3_reduce= 112,
                            filter_3x3= 224,
                            filters_5x5_reduce= 24,
                            filters_5x5= 64,
                            filters_pool_proj=64,
                            name='inception_4b')

image = inception_module(image,
                           filters_1x1= 128,
                           filters_3x3_reduce = 128,
                           filter_3x3= 256,
                           filters_5x5_reduce= 24,
                           filters_5x5=64,
                           filters_pool_proj=64,
                           name='inception_4c')

image = inception_module(image,
                           filters_1x1=112,
                           filters_3x3_reduce=144,
                           filter_3x3= 288,
                           filters_5x5_reduce= 32,
                           filters_5x5=64,
                           filters_pool_proj=64,
                           name='inception_4d')

image2 = AveragePooling2D((5,5), strides=3)(image)
image2 = Conv2D(128, (1,1), padding='same', activation='relu')(image2)
image2 = Flatten()(image2)
image2 = Dense(1024, activation='relu')(image2)
image2 = Dropout(0.4)(image2) #Changed from 0.7
image2 = Dense(5, activation='softmax', name='auxilliary_output_2')(image2)

image = inception_module(image,
                            filters_1x1=256,
                            filters_3x3_reduce=160,
                            filter_3x3=320,
                            filters_5x5_reduce=32,
                            filters_5x5=128,
                            filters_pool_proj=128,
                            name= 'inception_4e')

image = MaxPool2D((3,3), padding='same', strides=(2,2), name='max_pool_4_3x3/2')(image)

image = inception_module(image,
                           filters_1x1=256,
                           filters_3x3_reduce=160,
                           filter_3x3= 320,
                           filters_5x5_reduce=32,
                           filters_5x5= 128,
                           filters_pool_proj=128,
                           name='inception_5a')

image = inception_module(image, 
                           filters_1x1=384,
                           filters_3x3_reduce=192,
                           filter_3x3=384,
                           filters_5x5_reduce=48,
                           filters_5x5=128,
                           filters_pool_proj=128,
                           name='inception_5b')

image = GlobalAveragePooling2D(name='avg_pool_5_3x3/1')(image)

image = Dropout(0.4)(image)
image = Dense(5, activation='softmax', name='output')(image)

model = Model(input_layer, [image,image1,image2], name='inception_v1')

model.summary()


epochs = 2
initial_lrate = 0.01 # Changed From 0.01

def decay(epoch, steps=100):
  initial_lrate = 0.01
  drop = 0.96
  epochs_drop = 8
  lrate = initial_lrate * math.pow(drop,math.floor((1+epoch)/epochs_drop))#
  return lrate

sgd = keras.optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
# nadam = keras.optimizers.Nadam(lr= 0.002, beta_1=0.9, beta_2=0.999, epsilon=None)
# keras
lr_sc = LearningRateScheduler(decay)
# rms = keras.optimizers.RMSprop(lr = initial_lrate, rho=0.9, epsilon=1e-08, decay=0.0)
# ad = keras.optimizers.adam(lr=initial_lrate)
model.compile(loss=['categorical_crossentropy', 'categorical_crossentropy','categorical_crossentropy'],loss_weights=[1,0.3,0.3], optimizer='sgd', metrics=['accuracy'])

# loss = 'categorical_crossentropy', 'categorical_crossentropy','categorical_crossentropy'

history = model.fit(X_train, [train_labels_hotEncode,train_labels_hotEncode,train_labels_hotEncode], validation_split=0.3 ,epochs=epochs, batch_size= 32, callbacks=[lr_sc])

谢谢,

【问题讨论】:

    标签: python keras


    【解决方案1】:

    validation_split是通过进入的参数。它是一个确定如何在训练和验证集中划分数据的数字。例如,如果validation_split = 0.1然后10%的数据将在验证集中使用,并且在测试集中将使用90%的数据。

    validation_data是您在验证集中明确传递的参数。如果您通过验证数据,请使用您的明确传递在数据中,而不是使用validation_split计算验证集。这是它意味着“忽略” - 在validation_data 987654327 validation_splitvalidation_data

    在您的情况下,您想使用30%的数据作为验证数据,只需通过validation_split=0.3并且不要在validation_data的参数中传递。

    【讨论】:

    • 感谢您的解释。但如果我不给validation_data,我才面临另一个问题,并且只应用validation_split,准确性非常丑陋。 loss: 1.9336 - output_loss: 1.2280 - auxilliary_output_1_loss: 1.1791 - auxilliary_output_2_loss: 1.1731 - output_acc: 0.3574 - auxilliary_output_1_acc: 0.3708 - auxilliary_output_2_acc: 0.3642 - val_loss: 9.3849 - val_output_loss: 6.3216 - val_auxilliary_output_1_loss: 5.0935 - val_auxilliary_output_2_loss: 5.1177 - val_output_acc: 0.0000e+00 - val_auxilliary_output_1_acc: 0.0000e+00 - val_auxilliary_output_2_acc: 0.0000e+00
    • 你能告诉我为什么吗?
    • @ farukhkhan你所提出的是一个单独的问题。该问题可能与您的模型架构相关,而不是验证拆分。您需要发布有关您的模型的更多信息。 span>
    • @ farukhkhan validation_split从最后一个样本中绘制。尝试洗牌您的数据。 span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2019-07-19
    • 2014-02-23
    • 1970-01-01
    • 2023-03-09
    • 2023-02-14
    • 1970-01-01
    相关资源
    最近更新 更多