二进制文件读取案例|学习笔记

简介: 快速学习二进制文件读取案例

开发者学堂课程【深度学习框架 TensorFlow 入门二进制文件读取案例学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/773/detail/13555


二进制文件读取案例


内容介绍:

一、NHWC 与 NCHW

二、读取案例


一、NHWC 与 NCHW

在读取设置图片形状的时候有两种格式:

设置为“NHWC”时,排列顺序为[batch,height,width,channels];

设置为“NCHW”时,排列顺序为[batch,channels,height,width]。

其中 N 表示这批图像有几张, H 表示图像在竖直方向有多少像素, W 表示水平方向像素, C 表示通道数。

Tensorflow 默认的[height,width,channel]

假设 RGB 三通道两种格式的区别如下如所示:


image.png


理解

假设1,2,3,4-红色 5,6,7,8-绿色 9,10,11,12-蓝色

如果通过在最低维度0[channels,height,width],RGB 三颜色分成三组,在第一维度上找到三个 RGB 颜色

如果通过在最低维度0[height,width,channels],在第三维度上找到 RGB 三个颜色


二、读取案例

import tensorflow as tf

class Cifar(object):

def __init__(self):

# 初始化操作

self.height = 32

self.width = 32

self.channels = 3

# 设置图像字节数

self.image_bytes = self.height * self.width * self.channels

self.label_bytes = 1

self.all_bytes = self.label_bytes + self.image_bytes

def read_and_decode(self):

"""

读取二进制文件

:return:

"""

# 1、构造文件名队列

file_queue = tf.train.string_input_producer(file_list)

# 2、读取与解码

# 读取阶段

reader = tf.FixedLengthRecordReader(self.all_bytes)

# key 文件名 value 一个样本

key,value = reader,read(file_queue)

print("key:\n",key)

print("value:\n",value)

# 解码阶段

decoded = tf.decode_raw(value,tf.uint8)

print("decoded:\n",decoded)

# 将目标值和特征值切片切开

label=tf.slice(decoded,[0],[self.label_bytes])

tf.slice(decoded,[self.label_bytes],[self.image_bytes])

print("label:\n",label)

print("image:\n",image)

# 调整图片形状

image_reshaped=tf.reshaped(image,shape=[self,channels,self.heighy,self.width])

print("image_reshaped:\n",image_reshaped)

# 转置,将图片的顺序转为 height,width,channels

image_transposed=tf.transpose(image_reshaped,[1,2,0])

print("image_transposed:\n",image_transposed)

# 调整图像类型

image_cast=tf.cast(image_transposed,tf.float32)

# 3、批处理

label_batch,image_batch=tf.train.batch([label,image_cast],batch_size=100,num_threads=1,capacity=100)

# 开启会话

with tf.Session() as sess:

# 开启线程

coord = tf.train.Coordinator()

threads=tf.train.start_queue_runners(sess=sess,coord=coord)

key_new,value_new,decoded_new,label_new,image_new,image_reshaped_new,image_transposed_new=sess.run([key,value,decoded,label,image_reshaped,image_transposed])

label_value,image_value=sess.run(label_batch,image_batch)

print("key_new:\n",key_new)

print("value_new:\n",value_new)

print("decoded_new:\n",decoded_new)

print("label_new:\n",label_new)

print("image_new:\n",image_new)

print("image_reshaped_new:\n",image_reshaped_new)

print("image_transposed_new:\n",image_transposed_new)

print("label_value:\n",label_value)

print("image_value:\n",image_value)

# 回收线程

coord.request_stop()

coord.join(threads)

return None

if __name__ == "__main__":

file_name = os.listdir("./cifar-10-batches-bin")

print("file_name:\n",file_name)

# 构造文件名路径列表

fiel_list = [os.path.join("./cifar-10-batches-bin/",file) for file in file_name if file[-3:] == "bin"]

print("file_list:\n",file_list)

# 实例化 Cifar

Cifar = Cifar()

Cifar.read_and_decode(file_list)

相关文章
|
移动开发
诺顿定理
诺顿定理(Norton's theorem)是电路理论中的一个重要定理,它可以将复杂的线性电路简化为一个等效的电流源和一个等效的电阻。诺顿定理是基于电流的观点来描述电路的,与其对偶定理——戴维南定理相对应。
570 0
|
存储 索引
数据结构各结构特点(数组、链表、栈、队列、树)(上)
数据结构各结构特点(数组、链表、栈、队列、树)
484 0
|
3月前
|
传感器 人工智能 监控
医院不良事件管理系统:PDCA持续改进,形成事件的整改闭环管理
医院安全事件管理系统通过全流程闭环管理、多维度分析与RCA根因分析,助力上报与处理高效协同,支持智能流转、风险预警与持续改进,提升医疗质量与患者安全。
462 5
|
数据库 芯片
如何使用GEOquery和limma完成芯片数据的差异表达分析
如何分析芯片数据 我最早接触的高通量数据就是RNA-seq,后来接触的也基本是高通量测序结果而不是芯片数据,因此我从来没有分析过一次芯片数据,而最近有一个学员在看生信技能树在腾讯课堂发布的课程GEO数据库表达芯片处理之R语言流程遇到了问题问我请教,为了解决这个问题,我花了一个晚上时间学习这方面的分析。
4503 0
|
机器学习/深度学习 监控 数据库
Python 毕业设计 - 基于 opencv 的人脸识别上课考勤系统,附源码
Python 毕业设计 - 基于 opencv 的人脸识别上课考勤系统,附源码
|
存储 NoSQL Cloud Native
云原生数据库 Tair(一)
云原生数据库 Tair(一)
467 1
|
存储 安全 Java
开放实验室管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
开放实验室管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
227 0
|
Android开发
Android 使用BottomNavigationView和Novigation组件实现底部导航功能
Android 使用BottomNavigationView和Novigation组件实现底部导航功能
578 0
|
存储 安全 Java
【数据安全】教程:使用 Azure Key Vault 证书保护 Spring Boot 应用程序
本教程向你展示如何使用 Azure Key Vault 和 Azure 资源的托管标识通过 TLS/SSL 证书保护你的 Spring Boot(包括 Azure Spring 应用程序)应用程序。
|
Java API 开发工具
极光:手机APP消息推送平台
简单来说:极光推送是一个免费的开源的手机APP消息推送平台(类似帅哥美女们常用的购物APP某宝、某东等,一些优惠券消息后台推送到你们手机上)。
1275 0
极光:手机APP消息推送平台