某些情况下我们需要对张量进行维度变换,一般可以通过调用以下两种方法实现:

# 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'的原因相关推荐

  1. 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() ...

  2. Pyspark报错:Total size of serialized results is bigger than spark.driver.maxResultsSize

    问题 如题 原因 spark.dirver.maxResultSize参数默认为1024兆,所以会有限制 解决方法 在python脚本最上面添加如下配置即可 from pyspark.sql impo ...

  3. 解决 maven 项目中加入了 lombok 库后依然报错的问题

    解决 maven 项目中加入了 lombok 库后依然报错的问题 参考文章: (1)解决 maven 项目中加入了 lombok 库后依然报错的问题 (2)https://www.cnblogs.co ...

  4. Unity Android平台读取文件时添加了权限依然报错“Access to the path is denied“

    Unity 调用Android读取文件"Access to the path is denied" 添加权限依然报错 记录一下Unity 调用Android读取文件"Ac ...

  5. python报错ValueError: Must pass 2-d input. shape=(5, 1, 10)解决方案

    1.承接上一篇博文,上文提到append()函数中的参数ignore_index=True,如果加上该参数,是a.append(b,ignore_index=True),数据不支持的情况下会报错&qu ...

  6. oracle log block size,案例:Oracle无法启动报错ORA-00218: block size 0 重建控制文件

    天萃荷净 oracle数据库无法启动报错ORA-00218故障,通过重建控制文件解决文件损坏问题 遇到一个案例在数据库启动的时候报ORA-00218错误,而这个故障的引起原因是因为重建控制文件的时候, ...

  7. 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. __ ...

  8. import lap报错ValueError

    import lap报错ValueError: numpy.ndarray has the wrong size, try recompiling. Expected 88, got 96 问题:首先 ...

  9. 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等数据 ...

最新文章

  1. IHttpHandler 概述
  2. nero结果,对应的分析。如下。
  3. 使用infinite-scroll实现Ghost博文列表的滚动加载
  4. 《JavaScript100例|01》之javaScript实现俄罗斯方块,唤起了女朋友儿时的回忆!
  5. HTML+CSS+JS实现 ❤️爱心文字3D旋转动画特效❤️
  6. 最暖数据: 除夕有6.88亿人用微信红包传递狗年祝福
  7. openGL与openGL ES 的区别
  8. 地图上分成一块一块区域 高德地图_高德地图行政区域划分问题有点搞不懂
  9. proteus常用器件
  10. 霍尼韦尔和上工申贝达成战略合作,打造智能化物流仓储管理
  11. 双赛道近四百万奖金,2021全国人工智能大赛来了
  12. 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)...
  13. 你想要的宏基因组-微生物组知识全在这(2020.5)
  14. 北京商标权律师讲解商标使用应该注意什么事项?
  15. 修改css样式后刷新网页无改变
  16. Win10桌面图标无法拖动
  17. transformers的近期工作成果综述
  18. eclipse安装、优化、配置、插件添加整理
  19. 用注册表修改Windows系统的MAC地址
  20. hpuoj【1391】矩阵A+B【数组】【水题】

热门文章

  1. 小米android q适配机型,小米官方公布安卓Q适配机型以及内测时间:最早2019年Q4季度开始...
  2. 【认证篇 / 本地】(7.0) ❀ 02. 无线 Guest 用户免输密码 ❀ FortiGate 防火墙
  3. Lattice原理及在通信中的应用 1 Lattice 基础
  4. 2021中青杯数学建模A题思路详细分析 代码?
  5. 经典算法——数字三角形的三种解题方法:递推、记忆化搜索、动态规划
  6. 调试英语计算机,计算机辅助调试,computer-aided tuning,音标,读音,翻译,英文例句,英语词典...
  7. 第3期 2009年6月 湖南人文科技学院学报 Journal of Hunan Institute of Humanities,Science and Technology No.3 Jun.2009
  8. 给大四实习学生的一些建议
  9. 如何把flv格式无损转换成mp4
  10. 51单片机(二)流水灯的几种实现方法