【Tensorflow、Keras】关于Reshape层小结(部分问题未解决)
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正常情况
- 代码部分
from keras.layers import *input = Input((16, 16, 3))
print('改变之前的shape:', input.shape)
a = Reshape((16 * 4, -1))(input)
print('改变之后的shape:', a.shape)
- 结果:
- 个人看法:
- 不管是改变之前的还是改变之后的shape,第一维的None都是批(batch)的大小
- 改变之后的shape的第三维,应该是由计算所得,即:16 * 16 * 3)/ (16 * 4) = 12 (关于这里面为什么没有显示具体的数字,12,没有找到一个合理的解释)
1.1.2 Keras不正常情况
- 代码部分
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)
- 结果:
ValueError: total size of new array must be unchanged
- 个人看法:
- 这里reshape 的元素个数超过了总元素个数,按照预期是报错显示,没有问题。
1.2 Tensorflow的Reshape
1.2.1 Tensorflow正常情况
- 代码部分
from tensorflow.keras.layers import *input = Input((16, 16, 3))
print('改变之前的shape:', input.shape)
a = Reshape((16 * 4, -1))(input)
print('改变之后的shape:', a.shape)
- 结果
- 个人看法:
这里和Keras的情况相同,不赘述。
1.2.2 Tensorflow不正常情况
- 代码部分
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)
- 结果
- 个人看法:
- 这里并没有检测reshape以后的总元素个数是否和输入的元素个数相同,此处应该是一个bug。
- tensorflow版本为2.0.0
2. 在具体数据中
2.1 keras 的Reshape层
- 代码
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)
- 结果
- 个人看法:
- 这里值得注意的是,Reshape,将a_tensor第一维认为是批的大小,批的大小是不计入计算的,剩下的元素个数进行改变shape的计算。
- Reshape层返回的是一个batch_size + target_shape,具体参考文后链接
2.2 tensorflow 的Reshape层
- 代码
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)
- 结果
4. 个人看法
这里Reshape和tensorflow里面的Reshape是一样的。
2.3 tf.reshape(附)
- 代码
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)
- 结果
- 个人看法
这里用的是tf.reshape,可以看到,其中的-1,是总元素个数除于已确定的元素个数。
3. 总结
- 关于Reshape层中,
- 当在模型中时,Reshape,第一维度为批的大小,其显示为None
- 当在具体数字计算中,第一维度为批的大小,其显示为传入数据shape的第一个维度,即批的大小。
- 关于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层小结(部分问题未解决)相关推荐
- Tensorflow.keras.layers各种层的学习笔记
目录 karas简介 一. 输入层keras.layers.Input 二. 嵌入层keras.layers.Embedding 三. Lambda层keras.layers.Lamda karas简 ...
- tensorflow中的BN层实现
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from tensorflow.keras imp ...
- Keras.layers各种层介绍,网络层、卷积层、池化层 等
[转载]Keras.layers各种层介绍 - 心冰之海 - bk园 https://www.cnblogs.com/lhxsoft/p/13534667.html 文章导航 一.网络层 1.常用网络 ...
- Tensorflow.Keras 时序回归模型的建立
Learn from Keras官方网站 目前tensorflow 2.0版本已经集成了keras的所有功能,所以直接安装tensorflow就可以调用Keras,非常方便. 作为Keras入门可以看 ...
- 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1
日萌社 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1 人工智能AI:TensorFlow Keras PyTorch ...
- Tensorflow③ Keras的LSTM和TF的LSTM实现的源码剖析
最近在做可以转成pb模型的RNN/LSTM层的实现细节分析.经过一些分析,发现了在Keras里面常见的keras.layers.LSTM和Tensorflow的tf.contrib.rnn.LSTMC ...
- python——tensorflow使用和两层全连接神经网络搭建
一.Tensorflow使用 1.Tensorflow简介 TensorFlow是一个软件库,封装了建构神经网络的API,类似于MatLab的神经网络工具箱,是Google于2015年推出的深度学习框 ...
- Keras:Lambda 层
Lambda层 keras.layers.core.Lambda(function, output_shape=None, mask=None, arguments=None) 本函数用以对上一层的输 ...
- python检测吸烟的算法_yolov3+tensorflow+keras实现吸烟的训练全流程及识别检测
yolov3+tensorflow+keras实现吸烟的训练全流程及识别检测 弈休丶 2019-12-30 23:29:54 1591 收藏 19 分类专栏: 基于yolov3+tensorflow+ ...
- TensorFlow Keras API用法
TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...
最新文章
- JSON 之父新作,JavaScript “葵花宝典”参悟 JS 之道
- 使用kibana可视化报表实时监控你的应用程序
- 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数
- [原]go lang windows环境搭建
- SUID、SGID、粘滞位
- Unity3d中的属性(Attributes)整理【转载】
- cocos2d-x 使用BMFont生成中文字体并应用
- Win10的投屏功能无法使用问题解决思路
- 怎么才能打开dwg图纸?
- 设计模式-单例模式,观察者模式
- linux驱动——内核通知链(探究i2c-dev.c 中的bus_register_notifier函数所得)
- Vue.js学习笔记(3)循环语句
- azdb文件怎么打开_az mysql db
- bats指哪几家公司_用BATS测试Bash
- 【漫漫转码路】Python Day 16
- python显示静态html文件,python3的爬虫笔记1——静态网页获取
- 团队任务管理该怎么做才高效?管理者应该学会这些
- 绝对连续的一个等价定义
- 【转载】学习总结:初等数论(3)——原根、指标及其应用
- 满足多语言环境的拼多多API接口调用销量/详情数据
热门文章
- mysql主从复制1064_mysql主从复制或其他操作报错ERROR 1064 (42000): You have an er
- cosnπ为什么是离散信号_奥本海姆《信号与系统》(第2版)笔记和课后习题(含考研真题)详解(下册)复习答案考研资料...
- FISCO BCOS(三)——— 部署及调用HelloWorld合约
- 段错误(已转储)什么意思_发表论文已检索什么意思
- (day 45 - 中序遍历 ) 剑指 Offer 54. 二叉搜索树的第k大节点
- vba 定义数组_excel自定义排序的三种方法
- 论文笔记_S2D.18_2019-ICRA_DeepFusion: 基于单视图深度和梯度预测的单目SLAM实时稠密三维重建
- 类的继承与派生的基础学习
- 师妹:3D视觉方向的招聘,有哪个比较好的社区呢?
- 28篇论文、6 大主题带你一览 CVPR 2020 研究趋势