every blog every motto: We would rather reuse an active dwarf than a sleeping giant.

0. 前言

reshape说起来不复杂,就是改变特征图的尺寸,但在实际过程中,却发现了有意思的问题,遂记之。暂未解决。
本节主要讲解有关tensorflow的Rehape层以及Keras中的Reshape层及其比较,最后附上有关tf.reshape方法。

1. 在模型中

1.1 Keras的Reshape

1.1.1 Keras正常情况

  1. 代码部分
from keras.layers import *input = Input((16, 16, 3))
print('改变之前的shape:', input.shape)
a = Reshape((16 * 4, -1))(input)
print('改变之后的shape:', a.shape)
  1. 结果:
  2. 个人看法:
  • 不管是改变之前的还是改变之后的shape,第一维的None都是批(batch)的大小
  • 改变之后的shape的第三维,应该是由计算所得,即:16 * 16 * 3)/ (16 * 4) = 12 (关于这里面为什么没有显示具体的数字,12,没有找到一个合理的解释)

1.1.2 Keras不正常情况

  1. 代码部分
    reshape总元素个数不等于传入的元素个数
    代码中多乘了200,
from keras.layers import *input = Input((16, 16, 3))
print('改变之前的shape:', input.shape)
a = Reshape((16 * 4*200, -1))(input) # 这里多乘了200
print('改变之后的shape:', a.shape)
  1. 结果:
ValueError: total size of new array must be unchanged
  1. 个人看法:
  • 这里reshape 的元素个数超过了总元素个数,按照预期是报错显示,没有问题。

1.2 Tensorflow的Reshape

1.2.1 Tensorflow正常情况

  1. 代码部分
from tensorflow.keras.layers import *input = Input((16, 16, 3))
print('改变之前的shape:', input.shape)
a = Reshape((16 * 4, -1))(input)
print('改变之后的shape:', a.shape)
  1. 结果
  2. 个人看法:
    这里和Keras的情况相同,不赘述。

1.2.2 Tensorflow不正常情况

  1. 代码部分
    reshape总元素个数不等于传入的元素个数
    代码中多乘了200,
import tensorflow as tf
from tensorflow.keras.layers import *
print('tensorflow版本为:' + tf.__version__)input = Input((16, 16, 3))
print('改变之前的shape:', input.shape)
a = Reshape((16 * 4*200, -1))(input)  # 这里多乘了200
print('改变之后的shape:', a.shape)
  1. 结果
  2. 个人看法:
  • 这里并没有检测reshape以后的总元素个数是否和输入的元素个数相同,此处应该是一个bug。
  • tensorflow版本为2.0.0

2. 在具体数据中

2.1 keras 的Reshape层

  1. 代码
from keras.layers import *
import numpy as np
array = np.arange(2 * 3 * 4).reshape((2, 3, 4))
a_tensor = tf.convert_to_tensor(array)print('改变之前的shape:', a_tensor.shape)
x = Reshape((1, -1, 2))(a_tensor)
print('改变之后的shape:', x.shape)
  1. 结果
  2. 个人看法:
  • 这里值得注意的是,Reshape,将a_tensor第一维认为是批的大小,批的大小是不计入计算的,剩下的元素个数进行改变shape的计算。
  • Reshape层返回的是一个batch_size + target_shape,具体参考文后链接

2.2 tensorflow 的Reshape层

  1. 代码
import tensorflow as tf
from tensorflow.keras.layers import *
import numpy as np
array = np.arange(2 * 3 * 4).reshape((2, 3, 4))
a_tensor = tf.convert_to_tensor(array)print('改变之前的shape:', a_tensor.shape)
x = Reshape((1, -1, 2))(a_tensor)
print('改变之后的shape:', x.shape)
  1. 结果


4. 个人看法
这里Reshape和tensorflow里面的Reshape是一样的。

2.3 tf.reshape(附)

  1. 代码
import tensorflow as tf
import numpy as np
array = np.arange(2 * 3 * 4).reshape((2, 3, 4))
a_tensor = tf.convert_to_tensor(array)print('改变之前的shape:', a_tensor.shape)
x = tf.reshape(a_tensor, (3, -1, 2))
print('改变之后的shape:', x.shape)
  1. 结果
  2. 个人看法
    这里用的是tf.reshape,可以看到,其中的-1,是总元素个数除于已确定的元素个数。

3. 总结

  1. 关于Reshape层中,
  • 当在模型中时,Reshape,第一维度为批的大小,其显示为None
  • 当在具体数字计算中,第一维度为批的大小,其显示为传入数据shape的第一个维度,即批的大小。
  1. 关于tf.reshape
  • tf.reshape这里即正常的思维,改变形状,它不像Reshape层,会有批(batch)的概念。

参考文献

[1] https://tensorflow.google.cn/api_docs/python/tf/keras/layers/Reshape?hl=en
[2] https://keras-cn.readthedocs.io/en/latest/layers/core_layer/#reshape

【Tensorflow、Keras】关于Reshape层小结(部分问题未解决)相关推荐

  1. Tensorflow.keras.layers各种层的学习笔记

    目录 karas简介 一. 输入层keras.layers.Input 二. 嵌入层keras.layers.Embedding 三. Lambda层keras.layers.Lamda karas简 ...

  2. tensorflow中的BN层实现

    import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from tensorflow.keras imp ...

  3. Keras.layers各种层介绍,网络层、卷积层、池化层 等

    [转载]Keras.layers各种层介绍 - 心冰之海 - bk园 https://www.cnblogs.com/lhxsoft/p/13534667.html 文章导航 一.网络层 1.常用网络 ...

  4. Tensorflow.Keras 时序回归模型的建立

    Learn from Keras官方网站 目前tensorflow 2.0版本已经集成了keras的所有功能,所以直接安装tensorflow就可以调用Keras,非常方便. 作为Keras入门可以看 ...

  5. 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1

    日萌社 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1 人工智能AI:TensorFlow Keras PyTorch ...

  6. Tensorflow③ Keras的LSTM和TF的LSTM实现的源码剖析

    最近在做可以转成pb模型的RNN/LSTM层的实现细节分析.经过一些分析,发现了在Keras里面常见的keras.layers.LSTM和Tensorflow的tf.contrib.rnn.LSTMC ...

  7. python——tensorflow使用和两层全连接神经网络搭建

    一.Tensorflow使用 1.Tensorflow简介 TensorFlow是一个软件库,封装了建构神经网络的API,类似于MatLab的神经网络工具箱,是Google于2015年推出的深度学习框 ...

  8. Keras:Lambda 层

    Lambda层 keras.layers.core.Lambda(function, output_shape=None, mask=None, arguments=None) 本函数用以对上一层的输 ...

  9. python检测吸烟的算法_yolov3+tensorflow+keras实现吸烟的训练全流程及识别检测

    yolov3+tensorflow+keras实现吸烟的训练全流程及识别检测 弈休丶 2019-12-30 23:29:54 1591 收藏 19 分类专栏: 基于yolov3+tensorflow+ ...

  10. TensorFlow Keras API用法

    TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...

最新文章

  1. JSON 之父新作,JavaScript “葵花宝典”参悟 JS 之道
  2. 使用kibana可视化报表实时监控你的应用程序
  3. 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数
  4. [原]go lang windows环境搭建
  5. SUID、SGID、粘滞位
  6. Unity3d中的属性(Attributes)整理【转载】
  7. cocos2d-x 使用BMFont生成中文字体并应用
  8. Win10的投屏功能无法使用问题解决思路
  9. 怎么才能打开dwg图纸?
  10. 设计模式-单例模式,观察者模式
  11. linux驱动——内核通知链(探究i2c-dev.c 中的bus_register_notifier函数所得)
  12. Vue.js学习笔记(3)循环语句
  13. azdb文件怎么打开_az mysql db
  14. bats指哪几家公司_用BATS测试Bash
  15. 【漫漫转码路】Python Day 16
  16. python显示静态html文件,python3的爬虫笔记1——静态网页获取
  17. 团队任务管理该怎么做才高效?管理者应该学会这些
  18. 绝对连续的一个等价定义
  19. 【转载】学习总结:初等数论(3)——原根、指标及其应用
  20. 满足多语言环境的拼多多API接口调用销量/详情数据

热门文章

  1. mysql主从复制1064_mysql主从复制或其他操作报错ERROR 1064 (42000): You have an er
  2. cosnπ为什么是离散信号_奥本海姆《信号与系统》(第2版)笔记和课后习题(含考研真题)详解(下册)复习答案考研资料...
  3. FISCO BCOS(三)——— 部署及调用HelloWorld合约
  4. 段错误(已转储)什么意思_发表论文已检索什么意思
  5. (day 45 - 中序遍历 ) 剑指 Offer 54. 二叉搜索树的第k大节点
  6. vba 定义数组_excel自定义排序的三种方法
  7. 论文笔记_S2D.18_2019-ICRA_DeepFusion: 基于单视图深度和梯度预测的单目SLAM实时稠密三维重建
  8. 类的继承与派生的基础学习
  9. 师妹:3D视觉方向的招聘,有哪个比较好的社区呢?
  10. 28篇论文、6 大主题带你一览 CVPR 2020 研究趋势