使用 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 是交叉验证吗?