Keras前后尺寸一致却依然报错'ValueError: total size of new array must be unchanged'的原因
某些情况下我们需要对张量进行维度变换,一般可以通过调用以下两种方法实现:
# 1. TensorFlow自带
tf.reshape(tensor, target_shape) # 2. (推荐)Keras中的Reshape层。如果用第一种方法的话,最后构建Model的时候可能会报错:
# AttributeError: 'NoneType' object has no attribute '_inbound_nodes'
Reshape(target_shape)(tensor)
一般来说Reshape操作必须要满足变换前后总Elements数量不变。例如某维度为[2,4,8]的张量可以变换为[2,8,4]、[8,8]、[64]的形式。在Keras中可能显示为[?,2,4,8]的形式,其中‘?’代表输入尺寸,不影响结果。
但有时候即使前后尺寸完全一致,但依然报错'ValueError: total size of new array must be unchanged'就很让人怀疑人生了(如下):
print(z.get_shape()) # 查看张量z的shape
z_reshape = Reshape([4498, 2])(z) # 变换为同一shape
因为这个报错百思不得其解,看了中外无数个帖子、博客,快被逼疯!!经过多轮调试终于知道问题出在哪儿了:
产生原因:
问题出现在张量z是怎么得到上:是不是通过Lambda包装了自定义的操作?其output_shapes属性至关重要。本文的Z的产生过程如下:
def sampling(args):mean, log = argsepsilon = K.random_normal(shape=K.shape(mean))return tf.math.sqrt(log) * epsilon + mean# 通过sampling函数获得的结果. z_mean/z_log的shape均为[?,4498,2]
z = Lambda(sampling, output_shape=(2,), name='output_z')([z_mean, z_log])
通过output_shapes产生的维度是可操作的,而其它维度将被锁定。拿本例来说,正常情况下张量z [?,4498,2]只要符合尺寸乘积等于4498*2=8996即可。但由于我指定了output_shapes=(2,),它所产生的[?, 4498, 2]张量中我们只能对最后的2进行Reshape操作。比如:
z_reshape = Reshape([1, 2])(z)
# 结果为[?, 4498, 1, 2]z_reshape = Reshape([2, 1])(z)
# 结果为[?, 4498, 2, 1]z_reshape = Reshape([1, 1, 2])(z)
# 结果为[?, 4498, 1, 1, 2]
解决办法
准确指定output_shapes!!!不要只写最后一维就完了。
# 这是原先sampling的函数体,放一起了
epsilon = K.random_normal(shape=K.shape(mean))
return tf.math.sqrt(log) * epsilon + mean# 获得的结果
z = Lambda(sampling, output_shape=(4498, 2), name='output_z')([z_mean, z_log])# 再进行转换成功!
z_reshape = Reshape([2249, 4])(z)
此时通过Lambda产生的张量z [?, 4498, 2]中4498、2都是output_shapes已经声明过的,接下来只要target_shape之积等于4498*2=8996就能成功啦!
Keras前后尺寸一致却依然报错'ValueError: total size of new array must be unchanged'的原因相关推荐
- Python音频转成numpy数组:numpy.frombuffer报错ValueError: buffer size must be a multiple of element size
使用背景:导入音频信号,下面代码段最后一句报错 import wave import numpy as npf = wave.open(wav_path) params = f.getparams() ...
- Pyspark报错:Total size of serialized results is bigger than spark.driver.maxResultsSize
问题 如题 原因 spark.dirver.maxResultSize参数默认为1024兆,所以会有限制 解决方法 在python脚本最上面添加如下配置即可 from pyspark.sql impo ...
- 解决 maven 项目中加入了 lombok 库后依然报错的问题
解决 maven 项目中加入了 lombok 库后依然报错的问题 参考文章: (1)解决 maven 项目中加入了 lombok 库后依然报错的问题 (2)https://www.cnblogs.co ...
- Unity Android平台读取文件时添加了权限依然报错“Access to the path is denied“
Unity 调用Android读取文件"Access to the path is denied" 添加权限依然报错 记录一下Unity 调用Android读取文件"Ac ...
- python报错ValueError: Must pass 2-d input. shape=(5, 1, 10)解决方案
1.承接上一篇博文,上文提到append()函数中的参数ignore_index=True,如果加上该参数,是a.append(b,ignore_index=True),数据不支持的情况下会报错&qu ...
- oracle log block size,案例:Oracle无法启动报错ORA-00218: block size 0 重建控制文件
天萃荷净 oracle数据库无法启动报错ORA-00218故障,通过重建控制文件解决文件损坏问题 遇到一个案例在数据库启动的时候报ORA-00218错误,而这个故障的引起原因是因为重建控制文件的时候, ...
- Django报错 ValueError: The view didn‘t return an HttpResponse object. It returned None instead.
Django报错 ValueError: The view *** didn't return an HttpResponse object. It returned None instead. __ ...
- import lap报错ValueError
import lap报错ValueError: numpy.ndarray has the wrong size, try recompiling. Expected 88, got 96 问题:首先 ...
- Python中调用FRED报错ValueError: time data 'fred' does not match format '%Y-%m-%d'
Python中调用FRED报错ValueError: time data 'fred' does not match format '%Y-%m-%d' 小白一枚,刚学习python调用FRED等数据 ...
最新文章
- IHttpHandler 概述
- nero结果,对应的分析。如下。
- 使用infinite-scroll实现Ghost博文列表的滚动加载
- 《JavaScript100例|01》之javaScript实现俄罗斯方块,唤起了女朋友儿时的回忆!
- HTML+CSS+JS实现 ❤️爱心文字3D旋转动画特效❤️
- 最暖数据: 除夕有6.88亿人用微信红包传递狗年祝福
- openGL与openGL ES 的区别
- 地图上分成一块一块区域 高德地图_高德地图行政区域划分问题有点搞不懂
- proteus常用器件
- 霍尼韦尔和上工申贝达成战略合作,打造智能化物流仓储管理
- 双赛道近四百万奖金,2021全国人工智能大赛来了
- 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)...
- 你想要的宏基因组-微生物组知识全在这(2020.5)
- 北京商标权律师讲解商标使用应该注意什么事项?
- 修改css样式后刷新网页无改变
- Win10桌面图标无法拖动
- transformers的近期工作成果综述
- eclipse安装、优化、配置、插件添加整理
- 用注册表修改Windows系统的MAC地址
- hpuoj【1391】矩阵A+B【数组】【水题】
热门文章
- 小米android q适配机型,小米官方公布安卓Q适配机型以及内测时间:最早2019年Q4季度开始...
- 【认证篇 / 本地】(7.0) ❀ 02. 无线 Guest 用户免输密码 ❀ FortiGate 防火墙
- Lattice原理及在通信中的应用 1 Lattice 基础
- 2021中青杯数学建模A题思路详细分析 代码?
- 经典算法——数字三角形的三种解题方法:递推、记忆化搜索、动态规划
- 调试英语计算机,计算机辅助调试,computer-aided tuning,音标,读音,翻译,英文例句,英语词典...
- 第3期 2009年6月 湖南人文科技学院学报 Journal of Hunan Institute of Humanities,Science and Technology No.3 Jun.2009
- 给大四实习学生的一些建议
- 如何把flv格式无损转换成mp4
- 51单片机(二)流水灯的几种实现方法