黑马程序员3天玩转Python深度学习TensorFlow(第2天)

简介: 黑马程序员3天玩转Python深度学习TensorFlow(第2天)

第三章 数据读取、神经网络


3.1 文件读取流程


学习目标:说明TensorFlow文件读取的流程


有三种获取数据到TensorFlow程序的方法:


  1. QueueRunner:基于队列的输入管道从TensorFlow图像开头中的文件读取数据


  1. Feeding:运行每一步时,Python代码提供数据


  1. 预加载数据:TensorFlow图中的张量包含所有数据(对于小数据集)


3.1.1 文件读取流程


第一阶段:构造文件名队列


第二阶段:读取与解码


第三阶段:批处理


注意:这些操作需要启动运行这些队列操作的线程,以便我们在进行文件读取的过程中能够顺利进行入队出队操作


1 构造文件名队列


将需要读取的文件的文件名放入到文件名队列


tf.train.strng_input_produce(string_tensor, shuffle=True)


  • string_tensor:包含文件名+路径的1阶张量


  • num_epochs:过几遍数据,默认无限过数据


  • return:文件队列


2 读取与解码


从队列当中读取文件内容,并进行解码操作。


1)读取文件内容


阅读器默认每次只读取一个样本


具体来说:



2)内容解码



3 批处理



3.1.2 线程操作



3.1.3 总结


文件读取流程的相关API


3.2 图片读取


学习目标:


  • 说明图像数字化的三要素


  • 说明图片三要素与张量的表示关系


  • 了解张量的存储和计算类型


  • 应用tf.image.resize_images实现图像的像素改变


  • 应用tf.train.start_queue_runners实现读取线程开启


  • 应用tf.train.Corrdinator实现线程协调器开启


  • 应用tf.train.batch实现数据的批处理


3.2.1 图像基本知识


  • 组成图片最基本单位是像素


1 图片三要素


组成一张图片特征值是所有的像素值,有三个维度:图片长度、图片宽度、图片通道数

图片的通道数是什么?


描述一个像素点,如果是灰度图,那么只需要一个数值来描述它,就是单通道


如果一个像素点,有RGB三种颜色来描述它,及时三通道


  • 灰度图:单通道,[长,宽,1]


  • 彩色图片:三通道,[长,宽,3]


2 张量形状



3.2.2 图片特征值处理


为什么要缩放图片到统一大小?


在进行图像识别的时候,每个图片样本的特征数量要保持相同。所以需要将所有图片张量大小统一转换


缩小放大图片


tf.image.resize_images(images, size)


  • images:4-D形状[batch, height, width, channels]或3-D形状的张量[height, width, channels]的图片数据


  • size:1-D int32张量:new_height,new_width,图像的新尺寸


  • 返回4-D格式或者3-D格式图片


3.2.3 数据格式


  • 存储:unit8(阶跃空间)


  • 矩阵计算:float32(提高精度)


3.2.4 案例:狗图片读取


流程:


1)构造文件名队列


2)读取与解码,使样本的形状和类型统一


3)批处理


import tensorflow as tf
import os
def picture_read(file_list):
    """
    狗图片读取案例
    :return:
    """
    # 1、构造文件名队列
    file_queue = tf.train.string_input_producer(file_list)
    # 2、读取与解码
    # 读取阶段
    reader = tf.WholeFileReader()
    # key文件名, value一张图片的原始编码形式
    key, value = reader.read(file_queue)
    print("key:", key)
    print("value:", value)
    # 解码阶段
    image = tf.image.decode_jpeg(value)
    print("image;", image)
    # 图像的形状、类型修改
    image_resize = tf.image.resize_images(image, [200,200])
    print("image_resize:", image_resize)
    # 静态形状修改
    image_resize.set_shape(shape=[200,200,3])
    # 3、批处理
    image_batch = tf.train.batch([image_resize], batch_size=100, num_threads=1, capacity=100)
    print("image_batch:", image_batch)
    # 开启会话
    with tf.Session() as sess:
        # 创建线程协调员
        coord = tf.train.Coordinator()
        # 开启线程
        threads = tf.train.start_queue_runners(sess=sess, coord=coord)
        key_new, value_new, image_new, image_resize_new, image_batch_new = \
            sess.run([key, value, image, image_resize, image_batch])
        print("key_new:", key_new)
        print("value_new:", value_new)
        print("image_new:", image_new)
        print("image_resize_new:", image_resize_new)
        print("image_batch_new:", image_batch_new)
        # 回收线程
        coord.request_stop()
        coord.join(threads)
    return None
if __name__ == "__main__":
    # 构造路径 + 文件名的列表
    filename = os.listdir("./dog")
    #print(filename)
    # 拼接路径 + 文件名
    file_list = [os.path.join("dog", file) for file in filename]
    #print(file_list)
    picture_read(file_list)


3.3 二进制数据


学习目标:


  • 应用tf.FixedLengthRecordReader实现二进制文件读取


  • 应用tf.decode_raw实现解码二进制数据


  • 说明NHWC与NCHW的区别


  • 应用tf.transpose进行维度的位置修改


3.3.1 CIFAR10二进制数据集介绍



https://www.cs.toronto.edu/~kriz/cifar.html



3.3.2 CIFAR10二进制数据读取


流程分析:


1)构造文件名队列


2)读取与解码


3)批处理


先放在这里,先看神经网络,后期补上


3.5 神经网络基础


  • 了解感知机结构、作用以及优缺点


  • 了解tensorflow playground的使用


  • 说明感知机与神经网络的联系


  • 说明神经网络的组成


3.5.1 神经网络



神经网络的特点:


  • 每个连接都有个权值


  • 同一层神经元之间没有连接


  • 最后的输出结构对应的层也称之为全连接层




3.6 神经网络原理


学习目标:


  • 说明神经网络分类的原理


  • 说明softmax回归


  • 说明交叉熵损失




3.6.1 softmax回归


softmax回归将神经网络输出转换成概率结果





logits加上softmax映射----多分类问题


3.6.2 交叉熵损失





3.6.4 softmax、交叉熵损失API


计算logits和labels之间的交叉损失熵


tf.nn.softmax_cross_entropy_with_logits(labels=None, logits=None, name=None)


  • labels:标签值(真实值)


  • logits:样本加权之后的值


  • return:返回损失值列表


tf.reduce_mean(input_tensor)


tf.reduce_mean(input_tensor)


计算张量的尺寸的元素平均值


3.7 案例:minst手写数字识别


3.7.1 数据集介绍




1 特征值




2 目标值



3.7.2 minst数据获取API



from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('mnist_data', one_hot=True)
print(mnist.train.next_batch(1))
print(mnist.train.images[0])  # 查看特征值
print(mnist.train.labels[0])  # 目标值


3.7.3 实战:mnist手写体识别


1 网络设计



2 全连接层计算



import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
def full_connection():
    """
    用全连接对手写数字进行识别
    :return:
    """
    # 1)准备数据
    mnist = input_data.read_data_sets("./mnist_data", one_hot=True)
    # 用占位符定义真实数据
    X = tf.placeholder(dtype=tf.float32, shape=[None, 784])
    y_true = tf.placeholder(dtype=tf.float32, shape=[None, 10])
    # 2)构造模型 - 全连接
    # [None, 784] * W[784, 10] + Bias = [None, 10]
    weights = tf.Variable(initial_value=tf.random_normal(shape=[784, 10], stddev=0.01))
    bias = tf.Variable(initial_value=tf.random_normal(shape=[10], stddev=0.1))
    y_predict = tf.matmul(X, weights) + bias
    # 3)构造损失函数
    loss_list = tf.nn.softmax_cross_entropy_with_logits(logits=y_predict, labels=y_true)
    loss = tf.reduce_mean(loss_list)
    # 4)优化损失
    # optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
    optimizer = tf.train.AdamOptimizer(learning_rate=0.01).minimize(loss)
    # 5)增加准确率计算
    bool_list = tf.equal(tf.argmax(y_true, axis=1), tf.argmax(y_predict, axis=1))
    accuracy = tf.reduce_mean(tf.cast(bool_list, tf.float32))
    # 初始化变量
    init = tf.global_variables_initializer()
    # 开启会话
    with tf.Session() as sess:
        # 初始化变量
        sess.run(init)
        # 开始训练
        for i in range(3000):
            # 获取真实值
            image, label = mnist.train.next_batch(100)
            _, loss_value, accuracy_value = sess.run([optimizer, loss, accuracy], feed_dict={X: image, y_true: label})
            print("第%d次的损失为%f,准确率为%f" % (i+1, loss_value, accuracy_value))
    return None
if __name__ == "__main__":
    full_connection()



目录
相关文章
|
7天前
|
机器学习/深度学习 数据采集 传感器
使用Python实现深度学习模型:智能土壤质量监测与管理
使用Python实现深度学习模型:智能土壤质量监测与管理
130 69
|
2天前
|
机器学习/深度学习 数据采集 存储
使用Python实现智能农业灌溉系统的深度学习模型
使用Python实现智能农业灌溉系统的深度学习模型
25 6
|
2天前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
8 3
|
4天前
|
机器学习/深度学习 数据采集 算法框架/工具
使用Python实现深度学习模型:智能野生动物保护与监测
使用Python实现深度学习模型:智能野生动物保护与监测
19 5
|
6天前
|
机器学习/深度学习 数据采集 算法框架/工具
使用Python实现智能生态系统监测与保护的深度学习模型
使用Python实现智能生态系统监测与保护的深度学习模型
29 4
|
7天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
20 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
3天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能植物生长监测与优化
使用Python实现深度学习模型:智能植物生长监测与优化
21 0
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
54 0
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
59 0
|
3月前
|
持续交付 测试技术 jenkins
JSF 邂逅持续集成,紧跟技术热点潮流,开启高效开发之旅,引发开发者强烈情感共鸣
【8月更文挑战第31天】在快速发展的软件开发领域,JavaServer Faces(JSF)这一强大的Java Web应用框架与持续集成(CI)结合,可显著提升开发效率及软件质量。持续集成通过频繁的代码集成及自动化构建测试,实现快速反馈、高质量代码、加强团队协作及简化部署流程。以Jenkins为例,配合Maven或Gradle,可轻松搭建JSF项目的CI环境,通过JUnit和Selenium编写自动化测试,确保每次构建的稳定性和正确性。
58 0