DATA_FORMAT = 'NCHW' 和DATA_FORMAT = 'CHWN'

2023-11-02

转载自https://blog.csdn.net/qq_39622065/article/details/81228915

NHWC
[batch, in_height, in_width, in_channels]

NCHW
[batch, in_channels, in_height, in_width]

转换
NHWC –> NCHW:

import tensorflow as tf

x = tf.reshape(tf.range(24), [1, 3, 4, 2])
out = tf.transpose(x, [0, 3, 1, 2])

print x.shape
print out.shape

(1, 3, 4, 2)
(1, 2, 3, 4)
1
2

NCHW –> NHWC:

import tensorflow as tf

x = tf.reshape(tf.range(24), [1, 2, 3, 4])
out = tf.transpose(x, [0, 2, 3, 1])

print x.shape
print out.shape

(1, 2, 3, 4)
(1, 3, 4, 2)

这是一个无可奈何的问题,在如何表示一组彩色图片的问题上,Theano和TensorFlow发生了分歧, ‘日’模式,也即Theano模式会把100张RGB三通道的16×32(高为16宽为32)彩色图表示为下面这种形式(100,3,16,32),Caffe采取的也是这种方式。第0个维度是样本维,代表样本的数目,第1个维度是通道维,代表颜色通道数。后面两个就是高和宽了。这种theano风格的数据组织方法,称为“channels_first”,即通道维靠前。

而TensorFlow,的表达形式是(100,16,32,3),即把通道维放在了最后,这种数据组织方式称为“channels_last”。

tensorflow的格式如下:

[batch,in_height,in_with,in_channels]批量批次1000高度图片的长宽宽通道通道数

channels RGB则为3黑白为1

Keras默认的数据组织形式在〜/ .keras / keras.json中规定,查看柯林斯该文件的image_data_format一项查看,也可在代码中通过K.image_data_format()函数返回,请在网络的训练和测试中保持维度顺序一致。

唉,真是蛋疼,你们商量好不行吗?

keras中添加卷积层时,可以指定deat_format格式:


model.add(Convolution2D(
    batch_input_shape=(None, 1, 28, 28),   #多少数据  通道数  宽  高
    filters=32,     #滤波器数量
    kernel_size=5,   #滤波器大小5x5
    strides=1,       #步长1
    padding='same',     # Padding method
    data_format='channels_first',
))

1、代码中的DATA_FORMAT = ‘channels_first’,即通道维靠前。

[batch,in_channels,in_height,in_with]既批次:批次大小渠道:通道数高度:图片的长宽度:宽

2、当然也可以和tensorflow中的数据格式一样指定 channels_last = ‘channels_last’,keras默认为channels_last。

通用模板:



from keras import backend as K
w = 100   #图片宽度
h = 100   #图片高度
c = 3     #图片通道数
if K.image_dim_ordering() == 'th':
    X_train = X_train.reshape(-1, c, w, h)
    X_test = X_test.reshape(-1, c, w, h)
    input_shape = (1, w, h)
else:
    X_train = X_train.reshape(-1, w, h, c)
    X_test = X_test.reshape(-1, w, h, c)
    input_shape = (w, h, c)

X_train = X_train.reshape(-1, w, h, c)
X_test = X_test.reshape(-1, w, h, c)
input_shape = (w, h, c)

model.add(Convolution2D(
    batch_input_shape=(None,w,h,c),   #多少数据  通道数  宽  高
    filters=32,     #滤波器数量
    kernel_size=5,   #滤波器大小
    strides=1,       #步长
    padding='same'     # Padding method

))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DATA_FORMAT = 'NCHW' 和DATA_FORMAT = 'CHWN' 的相关文章

随机推荐

  • Java使用base64格式上传图片

    使用蚂蚁金服ui直接返回的是base64格式的图片 通过post方式进行请求 然后在控制器中以字符串的形式进行接收 接收之后进行转图片存储处理 只保存路径到数据库中 base64字节转图片代码 package com utils impor
  • qsort函数实现对任意数据的排序

    学会使用qsort函数排序 qsort介绍 compare函数介绍 不同的数据类型相应的比较函数定义 对数组元素为数字的 数组元素为字符时比较函数定义 结构体数据比较函数定义 qsort介绍 qsort函数是一个库函数 它的作用是对数据进行
  • 14.1 矩阵幂级数

    文章目录 矩阵的幂 矩阵幂的极限 谱半径与范数 矩阵幂级数 矩阵的幂 现在讨论下矩阵的n次方的问题 比如下面的矩阵 A 1
  • 医学图像配准MATLAB实现

    医学图像配准MATLAB实现 医学图像处理在临床诊断 肿瘤治疗和医学信息融合等领域中起着至关重要的作用 医学图像配准作为医学图像处理中的重要研究方向之一 其目的是将通过不同机器或技术获取到的不同角度或时间段的医学图像进行对比 以便医生或研究
  • 七种排序算法

    排序算法主要分为三大类 分别是插入排序 选择排序和交换排序 其中插入排序包括直接插入排序和希尔排序 选择排序包括直接选择排序和堆排序 交换排序包括冒泡排序 快速排序和归并排序 各种排序算法的时间复杂度和空间复杂度如下 一 插入排序 1 直接
  • android之fragment与fragment、activity与activity、fragment与activity之间的通信

    Broadcast广播接受者可以实现所有通信 activity与activity之间的通信 当下一个activity关闭时传值给上一个activity 主要用得到startActivityForResult和onActivityResult
  • epoll_create和epoll_create1

    名字 epoll create epoll create1 创建epoll文件描述符 摘要 include
  • 创建自定义类的对象数组

    源代码 public class Student static int number 0 静态变量的访问可以不用创建类的实例就可就可使用 lt 类名 属性 gt 的方法访问 String name 学生姓名 Student 无参构造函数 S
  • 【HDLBits 刷题 12】Circuits(8)Finite State Manchines 27-34

    目录 写在前面 Finite State Manchines 2014 q3c m2014 q6b m2014 q6c m2014 q6 2012 q2fsm 2012 q2b 2013 q2afsm 2013 q2bfsm 写在前面 HD
  • C++中的虚函数表和虚函数在内存中的位置

    目录 结论 今天在看别人面经的时候发现了这个问题 一时间发现自己也说不清楚 还想当然的以为 虚函数表既然是类对象公有的 那么应该在静态存储区 想当然终究只是想当然 经过试验得知 这种想法是错误的 由于不同的编译器在虚函数表上的实现可能不同
  • Jdk1.8新特性 - 方法引用

    一 说明 方法引用使用一对冒号 标识 通过方法的名字来指向一个方法 是函数式接口的另一种书写方式 通过方法引用 可以将方法的引用赋值给一个Function变量 Lambda表达式一般用于自己提供方法体 而方法引用一般直接引用现成的方法 二
  • Linux系统shell脚本之根分区监控

    Linux系统shell脚本之根分区监控 一 脚本要求 二 脚本分析 三 执行脚本 查看执行输出文件 一 脚本要求 1 编写一个shell脚本 脚本名为disk per sh 2 脚本检测根分区使用率 如果根分区超过80 则显示使用率 且提
  • ES6笔记(解构)

    1 解构 解构通俗点说 就是通过一种特定格式 快捷的读取对象 数组中的数据的方法 基本用法 如果右边是对象 左边也要用对象的格式 解构出来就是变量了 再也不是属性了 解构对象 var oUser name aaa age 20 es5读数据
  • [QT_001]解决Ubuntu下Qt无法连接MySQL数据库[Linux环境]

    准备 简要思路 编译Qt下MySQL项目 使其重新生成libqsqlmysql so这个动态库 而后进行替换 编译项目过程中 项目配置文件需要引入使用到MySQL的头文件和库 所以需要安装MySQL 我的环境 1 Ubuntu 18 04
  • 对受控组件和非受控组件的理解,以及应用场景?

    一 受控组件 受控组件 简单来讲 就是受我们控制的组件 组件的状态全程响应外部数据 举个简单的例子 class TestComponent extends React Component constructor props super pr
  • 笨人可以学计算机吗,为什么有的笨人一旦开窍,其人生就像开了挂似的呢?

    前言 真正的天才 是懂得在别人面前装糊涂的人 但如果他受到某种刺激 装糊涂也就没有必要了 低调惯了的人 总有一天 会一鸣惊人 韬盛和夫 大自然有一种特有的现象 自作聪明的动物往往不会活的太长 而那些看起不起眼的动物 往往隐藏着巨大的力量 笨
  • Bootstarp入门教程(6) 表格

    基本案例 为任意 table 标签添加 table可以为其赋予基本的样式 少量的内补 padding 和水平方向的分隔线 table
  • Redis中的事务

    1 Redis事务的定义 Redis事务是一个单独的隔离操作 事务中的所有命令都会序列化 然后按照顺序地执行 事务在执行的过程中 不会被其他客户端发送来的命令请求所打断 其实就是一个缓存队列 将所有任务放入 然后再某一个阶段 将其中的任务拿
  • C语言(Head First C)-9_1:静态库与动态库:静态库

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 9 1 静态库与动态库 静态库 我们已经见识过标准库的威力了 现在是时候在代码中发挥这种威力了 本章内容 创建自己的库 并在多个程序中复用相同代码 通过动态库在运行时
  • DATA_FORMAT = 'NCHW' 和DATA_FORMAT = 'CHWN'

    转载自https blog csdn net qq 39622065 article details 81228915 NHWC batch in height in width in channels NCHW batch in chan