-
TensorFlow 文件读取流程
-
文件名列表 文件名队列 (CSV(默认只读一行)、图片文件(一次只读一个样本)、二进制文件(指定一个样本bytes读取))
-
对文件名队列,进行出队实例,实行内容解码
-
-
构造好一个路径 + 文件名的队列
-
进行文件名队列的读取
-
进行解码操作
-
放到样本队列中,进行处理
-
-
图片三要素 如何将图片转换成一个向量
-
图片长度、宽度、图片通道
-
像素点:灰度值 0~255;RGB(红, 绿, 蓝)
-
-
图片张量表示
-
灰度图、彩色图
-
高、宽、(单通道、三通道)
-
3D:[height, width, channel]
-
4D:[batch, height, width, channel]
-
读取步骤
-
构建图片文件队列
-
读取图片数据,并进行解码 tf.WholeFileReader() read
-
处理图片数据形状,批处理返回,tf.image.resize_images, set_shape
-
形状必须固定之后才能进行,tf.train.batch
-
打印内容,运行:需要开启子线程去运行,子线程就去把数据读取到队列,主线程取出数据去训练
-
-
数据类型:
-
运算的时候:需要float32类型
-
读取出来的解码的类型:uint8格式
-
-
-
二进制数据的读取(指定bytes:一个样本的)
-
构造二进制文件队列
-
读取二进制数据并进行解码 tf.FixedLengthRecordReader(self.all_bytes) tf.decode_raw(value, tf.uint8)
-
分割目标值和特征值 tf.slice
-
形状类型改变 tf.cast
-
reshape (3072, )----[channel, height, width]
-
(3072, ) —>(1024R, 1024G, 1204B)transpose [channel, height, width] --->[height, width, channel]
-
-
批处理
-
-
TFRecords文件的特点
-
特点:是一种二进制文件,虽然它不如其他格式好理解,但是它能更好的利用内存,更方便复制和移动,并且不需要单独的标签文件。
-
Example:方便存储更多的图片的信息,特征值、目标值、通道等等,不需要更多去处理读取出来的结果
-
方便存储更多的图片信息,特征值、目标值、通道等等
-
-
存储与读取TFRecords文件
-
存储:
-
API:tf.python_io.TFRecordWriter("./tmp/cifar.tfrecords")
-
循环将数据构造
Example
协议内存块(protocol buffer)序列化之后写入文件 -
构造example:tf.train.Int64List(value=[Value]),tf.train.BytesList(value=[Bytes]),tf.train.FloatList(value=[value]) ,byets需要序列
-
example = tf.train.Example(features=tf.train.Features(feature={ "image": tf.train.Feature(bytes_list=tf.train.BytesList(value=[image])), "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[label])),}))
-
-
读取:
-
通过文件读取流程
-
在读取内容之后需要增加一个解析example协议的步骤
-
feature = tf.parse_single_example(values, features={ "image": tf.FixedLenFeature([], tf.string), "label": tf.FixedLenFeature([], tf.int64)})
-
-
-
神经网络 ANN
-
输入层、输出层、隐藏层
-
特点:
-
每个连接都有权值
-
同一层神经元之间没有连接
-
最后的输出结果对应的层也称之为全连接层
-
-
-
神经元也称之为感知机:这个感知机具有连接的权重和偏置,有一个sign:阶跃函数,输出0或者1
-
神经网络:多个神经元(感知机)组成
-
-
神经网络原理:神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数。
-
最后怎么分成哪几个类别:神经网络输出转换成概率的结果:softmax回归
-
交叉熵损失:目标值one_hot编码,预测值:概率分布,所有概率加起来为1;提高对应目标值为1的位置输出概率的大小,减小其他位置的概率
-
信息熵:所有概率相等,最不确定,值是最大的
-
损失
-
线性回归:均方误差
-
逻辑回归:对数似然
-
神经网络:交叉熵损失
-
-
优化
-
BP算法:
-
会随机初始化每条连接线权重和偏置
-
从后往前:逆向反馈更新神经网络中每条连接线的权重和每层的偏置
-
梯度下降+链式求导规则
-
-
-
-
Mnist手写数字识别
-
官网
-
把模型、训练定义好
-
-
mnist 获取数据,特征值[None, 784] 目标值[None, 10]
-
建立神经网络
-
权重:[784, 10] 偏置:[10] 每个样本的10个神经元输出结果
-
-
softmax、交叉熵损失计算
-
梯度下降优化
-
-
增加功能
-
计算准确率:求出每个样本是否相等的一个列表
-
equal_list = tf.equal(tf.argmax(y_true, 1), tf.argmax(y_predict, 1))
-
计算相等的样本的比例 accuracy = tf.reduce_mean(tf.cast(equal_list, tf.float32))
-
-
添加tensorboard变量观察
-
建立时间文件
-
收集张量值、合并张量值
-
运行合并的OP
-
写入文件(每批次的结果)
-
-
增加模型预测功能:输入预测数据,模型得出结果,进行处理看预测的类别是多少
-
Python 进行预测
# 预测100个样本 foriinrange(100): # label [1, 10] image, label= mnist.test.next_batch(1) # 直接运行网络的输出预测结果 print("第 %d 样本,真实的图片数字为:%d, 神经网络预测的数字为:%d "%( i, tf.argmax(label, 1).eval(), tf.argmax(sess.run(y_predict, feed_dict={x: image, y_true: label}), 1).eval() ))
-
线性神经网络局限性
-
任意多个隐层的神经网络和单层的神经网络都没有区别
-
-
-
-
deep_learning day02
最新推荐文章于 2023-02-25 03:04:39 发布