使用keras时遇到如下错误:
ValueError: Negative dimension size caused by subtracting 2 from 1 for 'block2_pool/MaxPool' (op: 'MaxPool') with input shapes: [?,1,75,128].
后发现是图片通道顺序的问题.
打开主文件夹—–> Ctrl+h查看隐藏文件夹—–> 找到.keras文件夹.
可以看到参数image_data_format的默认值是~/.keras/keras.json中设置的值,若从未设置过,则为“channels_last”。如图:
以128x128的RGB图像为例channels_last应将数据组织为(128,128,3),而channels_first将数据组织为(3,128,128).
通过查看函数set_image_dim_ordering():
def set_image_dim_ordering(dim_ordering):
"""Legacy setter for `image_data_format`.
# Arguments
dim_ordering: string. `tf` or `th`.
# Raises
ValueError: if `dim_ordering` is invalid.
"""
global _IMAGE_DATA_FORMAT
if dim_ordering not in {'tf', 'th'}:
raise ValueError('Unknown dim_ordering:', dim_ordering)
if dim_ordering == 'th':
data_format = 'channels_first'
else:
data_format = 'channels_last'
_IMAGE_DATA_FORMAT = data_format
可知,tf对应原本的channels_last,th对应channels_first。
因此,添加:
from keras import backend as K
K.set_image_dim_ordering('th')
这样保证要使用的通道顺序和配置的通道顺序一致.然后,再次运行问题消除.