使用 validation_split 处理我的形状,为啥?

Posted

技术标签:

【中文标题】使用 validation_split 处理我的形状,为啥?【英文标题】:Using validation_split munges my shapes, why?使用 validation_split 处理我的形状,为什么? 【发布时间】:2019-11-25 18:25:02 【问题描述】:

我有一个工作模型,我希望开始使用 validation_split(=~0.1) 进行“即时”验证。当我通过 0.0 以外的 validation_split 时,我得到一个错误。

我一直在调整传递给 fit() 以及传递给 tf.keras.layers.Conv2D() 的 batch_size 值,基本上使其成比例。没有喜悦。

这是我制作模型的方法:


    def make_convnet_model(flags, shape):
        model = tf.keras.models.Sequential(
            [
                tf.keras.layers.Conv2D(32,(8,8), strides=2, activation='relu',input_shape=shape,batch_size=flags.batch_size,name='conv2d_1'),
                tf.keras.layers.Conv2D(24, (4,4), strides=1, activation='relu',name='conv2d_2'),
                tf.keras.layers.MaxPool2D(),
                tf.keras.layers.Conv2D(16, (3, 3), strides=2, activation='sigmoid', input_shape=shape,batch_size=flags.batch_size, name='conv2d_3'),
                tf.keras.layers.Conv2D(8, (3, 3), strides=1, activation='sigmoid', name='conv2d_4'),
                tf.keras.layers.MaxPool2D(),
                tf.keras.layers.Flatten(),
                tf.keras.layers.Dense(64, activation='sigmoid', name='d3'),
                tf.keras.layers.Dense(5, activation='softmax', name='softmax_d4')
            ])

        return model

这就是我如何调用 fit():

    history = model.fit(x=X, y=Y, batch_size=flags.batch_size, epochs=flags.epochs, callbacks=[tensorboard,logger], verbose=flags.verbosity, validation_split=flags.validation_split)
     Here is my reward. I have taken out some of the spooge:
Namespace(***batch_size=20***, columns=320, csv_path='../csv/', data_path='f:/downloads/aptos2019-blindness-detection/', epochs=2,

gray=False, learning_rate=0.001, loss='mean_squared_error', metric=['accuracy'],model='conv2d',rows=320, test_path_fragment='test_images/', train_path_fragment='train_images/',validation_split=0.1, 冗长= 2) 张量流版本:1.14.0

Processed data path:f:/downloads/aptos2019-blindness-detection/train_images/color_320x320/
***Train on 18 samples, validate on 2 samples***
Epoch 1/2
Traceback (most recent call last):
  File "F:/projects/retinas/retina.py", line 212, in <module>
    main(sys.argv)
  File "F:/projects/retinas/retina.py", line 122, in main
    history = model.fit(x=X, y=Y, batch_size=flags.batch_size, epochs=flags.epochs, callbacks=[tensorboard,logger],

verbose=flags.verbosity,validation_split=flags.validation_split) 文件“C:\Users\WascallyWabbit\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\keras\engine\training.py”, 第 780 行,合身 steps_name='steps_per_epoch') 文件“C:\Users\WascallyWabbit\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py”, 第 363 行,在模型迭代中 batch_outs = f(ins_batch) 文件“C:\Users\WascallyWabbit\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\keras\backend.py”, 第 3292 行,在 调用 run_metadata=self.run_metadata) 文件“C:\Users\WascallyWabbit\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py”, 第 1458 行,在 调用 run_metadata_ptr) tensorflow.python.framework.errors_impl.InvalidArgumentError:不兼容的形状:[20,5] 与 [18,5] [[node Adam/gradients/loss/softmax_d4_loss/SquaredDifference_grad/BroadcastGradientArgs]]

【问题讨论】:

【参考方案1】:

问题出在我调用 Conv2D() 时不必要地指定了 batch_size。我现在接受该参数的默认值,并且它正在工作。

不知道为什么。不在乎:-|

【讨论】:

以上是关于使用 validation_split 处理我的形状,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中的 validation_split=0.2 是交叉验证吗?

在Keras的拟合函数中validation_data和validation_split之间的关系是什么?

java中的形参与实参

函数的形参与实参

Pyhton函数篇之函数中的形参与实参

函数的形参与实参