使用tf.keras.MaxPooling1D出现错误问题及解决
作者:IMWTJ 发布时间:2021-02-07 05:01:28
使用tf.keras.MaxPooling1D出现错误
错误如下
ValueError: Negative dimension size caused by subtracting 2 from 1 for 'pool_2/MaxPool' (op: 'MaxPool') with input shapes: [?,1,1,32].
首先了解MaxPooling1D
tf.layers.max_pooling1d(
inputs,
pool_size,
strides,
padding='valid',
data_format='channels_last',
name=None
)
用于1维输入的MaxPooling层
pool_size
:表示pooling window的大小strides
:指定pooling操作的步长padding
:一个字符串。padding的方法:string,valid或same,大小写不敏感。data_format
:一个字符串,channels_last(默认)或channels_first中的一个,输入中维度的排序,channels_last对应于具有形状(batch, length, channels)的输入,而channels_first对应于具有形状(batch, channels, length)的输入。name
:一个字符串,表示层的名称。
出现错误原因
是图片通道的问题,也就是”channels_last”和”channels_first”数据格式的问题。
input_shape=(3,28,28)是theano的写法,而tensorflow需要写出:(28,28,3)
其他人的处理方法
查了很多方法我的问题都没有解决:
法一:配置.keras下的keras.json文件,将channels_last修改为channels_first
{
"image_data_format" : "channels_first",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}
法二:在运行代码前面加两行代码:
from keras import backend as K
K.set_image_dim_ordering('tf')
我的处理方法
直接在出现错误的代码中补充一个参数,加上data_format='channels_first'就可以啦,,
pool_4 = MaxPooling1D(pool_size=2, name='pool_4',data_format='channels_first')(conv_4)
注:此方法适用MaxPooling2D
MaxPooling1D和GlobalMaxPooling1D区别
import tensorflow as tf
from tensorflow import keras
input_shape = (2, 3, 4)
x = tf.random.normal(input_shape)
print(x)
y=keras.layers.GlobalMaxPool1D()(x)
print("*"*20)
print(y)
'''
"""Global average pooling operation for temporal data.
Examples:
>>> input_shape = (2, 3, 4)
>>> x = tf.random.normal(input_shape)
>>> y = tf.keras.layers.GlobalAveragePooling1D()(x)
>>> print(y.shape)
(2, 4)
Arguments:
data_format: A string,
one of `channels_last` (default) or `channels_first`.
The ordering of the dimensions in the inputs.
`channels_last` corresponds to inputs with shape
`(batch, steps, features)` while `channels_first`
corresponds to inputs with shape
`(batch, features, steps)`.
Call arguments:
inputs: A 3D tensor.
mask: Binary tensor of shape `(batch_size, steps)` indicating whether
a given step should be masked (excluded from the average).
Input shape:
- If `data_format='channels_last'`:
3D tensor with shape:
`(batch_size, steps, features)`
- If `data_format='channels_first'`:
3D tensor with shape:
`(batch_size, features, steps)`
Output shape:
2D tensor with shape `(batch_size, features)`.
"""
'''
print("--"*20)
input_shape = (2, 3, 4)
x = tf.random.normal(input_shape)
print(x)
y=keras.layers.MaxPool1D(pool_size=2,strides=1)(x) # strides 不指定 默认等于 pool_size
print("*"*20)
print(y)
输出如下图 上图GlobalMaxPool1D 相当于给每一个样本每列的最大值
而MaxPool1D就是普通的对每一个样本进行一个窗口(1D是一维列窗口)滑动取最大值。
来源:https://blog.csdn.net/IMWTJ123/article/details/111505651
猜你喜欢
- 我在使用conda安装虚拟环境的过程中,下载一些包,比如torch等,发现在虚拟环境中有一份以外,pkgs文件夹下同样也会出现一份,大小一样
- 这个列表包含与网页抓取和数据处理的Python库python网络库通用urllib -网络库(stdlib)。requests&n
- 前言首先回顾一下什么是事务,事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么
- 伴随着自然语言技术和机器学习技术的发展,越来越多的有意思的自然语言小项目呈现在大家的眼前,聊天机器人就是其中最典型的应用,今天小编就带领大家
- 第三方库 binarytree其使用环境、安装方法及二叉树的相关知识,请见:《Python 初识二叉树,新手也秒懂!》不能导入的请安装:pi
- 闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。变量作用域规则首先,在函数中是能访问全局变量的:>
- [code]<script> var a=4.2343; alert(a.toFixed(3)); </script>
- 如何判断一个对象是可迭代对象? 方法是通过collections模块的Iterable类型判断:>>> from coll
- 原来图片自适应宽度一般都是通过Javascript来解决的,但是多少还是比较麻烦。还有一种通过设置外层容器overflow:hidden属性
- WINDOWS 下装MongoDB先去官网下载 :https://www.mongodb.com/download-center
- 1、 <script language="JavaScript"> javascript:window.hi
- 1. Scrapy简介Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等
- 可以使用python中的sys模块的getrefcount()方法来获取对象引用的个数。具体可以看以下的实例:import sys # 首先
- 1.在OpenCV中我们经常会遇到一个名字:Mask(掩膜)。很多函数都使用到它,那么这个Mask到底什么呢?2.如果我们想要裁剪图像中任意
- 很多查询类的存储过程会返回一个表结构的结果集,如果在其他存储过程中需要用到这个结果集,为了避免编写重复的sql脚本,可以直接使用前者的查询结
- PHP 5.0.0 和PHP 4.0.38 于2004年7月13日同时发布,这是一个值得我们PHP爱好者的一大喜讯。期盼已久的PHP5终于出
- ucky-canvas 介绍一个基于 Js + Canvas 的【大转盘 & 九宫格 & * 】抽奖, 致力于为 web
- 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScr
- fileno()方法返回所使用的底层实现,要求从操作系统I/O操作的整数文件描述符。语法以下是fileno()方法的语法:fil
- 网上找了很多资料,都不理想。其实ubuntu20以后的版本,很多功能都预装好了,安装django也没有以前的版本那么复杂。很简单,只需要几步