当前位置: 首页 > 知识库问答 >
问题:

Keras Maxpooling2d层给出ValueError

堵宏毅
2023-03-14

我正在尝试在keras中复制VGG16模型,以下是我的代码:

model = Sequential()
model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2))) ###This line gives error
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1000, activation='softmax'))

maxpooling2d层在注释的行处给出了一个错误

错误显示:

ValueError: Negative dimension size caused by subtracting 2 from 1 for 'MaxPool_7' (op: 'MaxPool') with input shapes: [?,1,112,128].

/usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc in create_node(cls,outbound_layer,inbound_layers,node_indexes,tensor_index)147 148 if len(input_tensors)==1:-->149 output_tensors=to_list(outbound_layer.call(input_tensors[0],mask=input_masks[0]))150output_masks=

/usr/local/lib/python2.7/dist-packages/keras/layers/pooling.pyc in call(self,x,mask)160strides=self.strides,161border_mode=self.border_mode,-->162 dim_ordering=self.dim_ordering)163返回输出164

/usr/local/lib/python2.7/dist-packages/keras/layers/pooling.pyc in_pooling_function(self,inputs,pool_size,strides,border_mode,dim_ordering)210 border_mode,dim_ordering):211 output=k.pool2d(inputs,pool_size,strides,-->212 border_mode,dim_ordering)213返回输出214

/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.pyc在pool2d(x,pool_size,strides,border_mode,dim_ordering,pool_mode)1699 1700如果pool_mode=='max':->1701 x=tf.nn.max_pool(x,pool_size,strides,padding=padding)1702 elif pool_mode=='avg':1703
x=tf.nn.avg_pool(x

/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/nn_ops.pyc in max_pool(value,ksize,strides,padding,data_format,name)1391 padding=padding,1392
data_format=data_format,->1393 name=name)1394 1395

/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_nn_ops.pyc in_max_pool(input,ksize,strides,padding,data_format,name)
1593 result=_op_def_lib.apply_op(“maxpool”,input=input,ksize=ksize,1594 strides=strides,padding=padding,->1595 data_format=data_format,name=name)1596

/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.pyc in apply_op(self,op_type_name,name,**关键字)747 op=g.create_op(op_type_name,inputs,output_types,name=scope,748 input_types=input_types,attrs=attr_protos,-->749 op_def=op_def)750 outputs=op.outputs 751 return_restructure

/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc in create_op(self,op_type,input,dtypes,input_types,name,attrs,op_def,compute_shapes,compute_device)2388
original_op=self._default_original_op,op_def=op_def)2389 if compute_shapes:->2390 set_shapes_for_outputs(ret)2391

/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc in set_shapes_for_outputs(op)1783 raise RuntimeError(“没有为标准操作%s注册的形状函数”1784
%op.type)->1785 shapes=shape_func(op)1786如果shapes为none:1787 raise RuntimeError(

/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/common_shape.pyc in call_cpp_shape_fn(op,input_tensors_need,debug_python_shape_fn)594 status)595 except errors.invalidargumenterror as err:-->596提高值错误(err.message)597 598#转换output_shapes中的TensorShapeProto值。

ValueError:输入形状为[?,1,112,128]的“MaxPool_7”(操作:“MaxPool')从1减去2导致的负尺寸大小。

共有1个答案

胡飞舟
2023-03-14

引用github中提到的一个答案,您需要指定维度排序:

Keras是Theano或Tensorflow库的包装器。Keras使用设置变量image_dim_ordering来决定输入层是Theano还是Tensorflow格式。此设置可通过2种方式指定-

  1. ~/.keras/keras.json中指定'tf''th',类似于so-image_dim_orderming:'th'。注意:这是一个json文件。
  2. 或在模型中指定image_dim_ordering,如下所示:model.add(MaxPooling2D(pool_size=(2,2),dim_ordering=“th”))

更新:2020年4月Keras 2.2.5链接似乎有一个更新的API,其中dim_ordering更改为data_format,因此:

keras.layers.maxpooling2d(pool_size=(2,2),strides=none,padding='valid',data_format='channels_first')获取NCHW或使用channels_last获取NHWC

附录:image_dim_ordering'th'模式中,通道尺寸(深度)位于索引1(例如3、256、256)。在'tf'模式中,它是否位于索引3(例如256、256、3)。从评论中引用@Naoko。

 类似资料:
  • 这一节,我们来制作弹出框,这个组件在非常多的网页中都有用到,其实大多数用到的还是css动画。其实用JS也可以做,但是请记住能CSS写的尽量别用JS写,专业的东西交给专业的做,因为用JS写非常的消耗性能,写的不好就炸了,常见的基本都可以通过css完成。 首先准备HTML (慎重)这个HTML DOM结构 不好做css动画。正确的在后面。 <div class="testContent" st

  • 介绍 弹出层容器,用于展示弹窗、信息提示等内容,支持多个弹出层叠加展示。 引入 import { createApp } from 'vue'; import { Popup } from 'vant'; const app = createApp(); app.use(Popup); 代码演示 基础用法 通过 v-model:show 控制弹出层是否展示。 <van-cell is-link

  • 使用指南 组件介绍 弹出层容器,用于展示弹窗、信息提示等内容,支持多个弹出层叠加展示 引入方式 import { Popup } from "feart"; components:{ 'fe-popup':Popup } data() { return { showdefault: false, showCenter: false, showTop:

  • Popup 弹出层 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 弹出层的内容通过slot传入,由用户自定义 通过v-model绑定一个布尔值的变量控制弹出层的打开和收起 <template> <view> <u-popup v-model="show"> <view>出淤泥而不染,濯清涟而不妖</vie

  • 本文向大家介绍给keras层命名,并提取中间层输出值,保存到文档的实例,包括了给keras层命名,并提取中间层输出值,保存到文档的实例的使用技巧和注意事项,需要的朋友参考一下 更新: 感谢评论区提供的方案。 采用model.summary(),model.get_config()和for循环均可获得Keras的层名。 示例如下图 对于keras特定层的命名,只需在层内添加 name 即可 补充知识

  • 由用户控制展现或关闭的全屏浮层组件,组件全屏覆盖。 标题 内容 类型 通用 支持布局 N/A 所需脚本 https://c.mipcdn.com/static/v2/mip-lightbox/mip-lightbox.js 组件支持 open, close, toggle 三种类型的事件,分别对应 显示,关闭,切换的操作。我们可以通过在按钮元素上绑定 tap 事件,并指定对应的 lightbox