ValueError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_28/MaxPool'...

问题描述

本人在做kaggle项目DogsVSCats时,在使用keras定义模型时,发生了以下错误:

ValueError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_28/MaxPool' (op: 'MaxPool') with input shapes: [?,1,32,64].

问题原因

keras提供了两种后端,一种是Theano,另一种是Tensorflow

在卷积核使用不同的内核时,由于input_shape的格式不同会导致报错
Theano:

input_shape=(3,ROWS, COLS)

Tensorflow:

input_shape=(ROWS, COLS,3)

解决方法

input_shape=(3,ROWS,COLS)改为tensorflow格式:```input_shape=(ROWS,COLS,3)``
问题解决。

11.22更新:续

经过探索,前面的方法其实并不好用,是一个坑,因为后面在进行model.fit()时会报错,大致意思是由于input_shape(ROWS,COLS,3),可期望输入是(3,ROWS,COLS)。

解决办法

1. 明白是keras版本是1还是2,model.add格式要对

keras1:

model.add(Convolution2D(128, 3, 3, border_mode='same', activation='relu'))

keras2:

model.add(Convolution2D(64,(3,3), activation='relu',padding='same'))
2. 将Theano内核更改为tensorflow

Theano:

model.add(MaxPooling2D(pool_size=(2, 2)))

Tensorflow:

model.add(MaxPooling2D(pool_size=(2, 2),data_format="channels_first"))

或者:

model.add(MaxPooling2D(pool_size=(2, 2),dim_ordering="th"))

持续更新,如果您使用这个方法解决不了,欢迎您积极贡献相关问题:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容