zoukankan      html  css  js  c++  java
  • 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)

    1. tf.matmul(X, w) # 进行点乘操作

    参数说明:X,w都表示输入的数据,

    2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False

    参数说明:x,y表示需要比较的两组数

    3.tf.cast(y, 'float') # 将布尔类型转换为数字类型

    参数说明:y表示输入的数据,‘float’表示转换的数据类型

    4.tf.argmax(y, 1) # 返回每一行的最大值的索引

    参数说明:y表示输入数据,1表示每一行的最大值的索引,0表示每一列最大值得索引

    5.tf.nn.softmax(y) # 对每一行数据,按照softmax方式,计算其概率值

    参数说明:y表示输入的数据

    6.tf.train.GradientDescentOptimizer(0.05).minimize(loss) # 对损失值采用梯度下降的方法进行降低操作

    参数说明:0.05表示学习率的大小,loss表示损失值

    代码说明:相较于上一个线性拟合的代码,逻辑回归的代码,使用了tf.placeholder()进行数据输入的占位,

    预测结果等价于tf.matmul(X, w) + b,作为预测结果

    代码:

    第一步:载入mnist数据集

    第二步:超参数的设置,包括输入样本的维度,分类的类别数,一个batch的大小,以及迭代的次数

    第三步:使用tf.placeholder() 构造X特征和y标签

    第四步:使用tf.Variable(tf.random_normal([inputSize, num_classes]))构造W和b

    第五步:使用tf.matmul获得预测得分值,使用tf.nn.softmax() 将得分值转换为概率值

    第六步:使用L2损失值,即均分误差作为损失值

    第七步:使用tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss), 对损失值进行梯度下降

    第八步:使用tf.equal(tf.argmax(y_pred), tf.argmax(y)) 获得两个标签的最大值索引是否一致,再使用tf.reduce_mean(tf.cast()) 计算准确率

    第九步:循环,使用mnist.train.next_batch进行训练数据的部分数据的读取

    第十步:sess.run([optm, loss], feed_dict={X:batch[0], y:batch[1]}) # 执行损失值和梯度下降降低损失值,从而更新参数

    第十一步:每迭代1000次,打印部分数据的准确率

    第十二步:打印测试数据部分的准确率

    import numpy as np
    import tensorflow as tf
    import matplotlib.pyplot as plt
    from tensorflow.examples.tutorials.mnist import input_data
    
    # 第一步:mnist数据集的载入
    mnist = input_data.read_data_sets('/data', one_hot=True)
    
    # 第二步:初始超参数的设置
    # 输入层的维度
    inputSize = 784
    # 分类的类别数
    num_classes = 10
    # 每一次参数更新的batchSize
    batch_size = 64
    # 循环的次数
    trainIteration = 50000
    
    # 第三步:输入数据初始化操作, 进行一个占位操作
    # X的维度为[-1, inputSize]
    X = tf.placeholder(tf.float32, [None, inputSize])
    # y的维度为[-1, num_classes]
    y = tf.placeholder(tf.float32, [None, num_classes])
    # 第四步:变量的初始化操作
    # W1进行正态参数初始化,维度为[inputSize, num_classes]
    W1 = tf.Variable(tf.random_normal([inputSize, num_classes], stddev=0.1))
    # b1进行全零初始化,维度为[num_classes]
    b1 = tf.Variable(tf.zeros([num_classes]))
    # 第五步:使用tf.matmul进行预测操作, 使用softmax计算概率值,扩大类别差距
    y_pred = tf.nn.softmax(tf.matmul(X, W1) + b1)
    # 第六步:使用L2 loss计算损失值, tf.reduce_mean求出所有的损失值的平均值
    loss = tf.reduce_mean(tf.square(y-y_pred))
    # 第七步:使用梯度下降法,对loss进行降低
    opt = tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)
    # 第八步:判断预测结果的最大值和真实值之间是否相等,使用True和False表示
    correct_pred = tf.equal(tf.argmax(y_pred, 1), tf.argmax(y, 1))
    # 使用tf.cast将布尔类型转换为float类型,使用reduce_mean求平均值
    accr = tf.reduce_mean(tf.cast(correct_pred, 'float'))
    # 变量初始化
    sess = tf.Session()
    init = tf.global_variables_initializer()
    sess.run(init)
    
    for i in range(trainIteration):
        # 第九步:使用mnist.train.next_batch 获得一个batch的数据
        bacth = mnist.train.next_batch(batch_size)
        # 第十步:使用sess.run执行梯度下降和loss操作,输入的参数为batch_X和batch_y数据
        _, loss = sess.run([opt, loss], feed_dict={X:bacth[0], y:bacth[1]})
        # 第十一步:如果迭代1000次,打印当前训练数据的准确率
        if  i % 1000 == 0:
            print('train accr %g'%(sess.run(accr, feed_dict={X:bacth[0], y:bacth[1]})))
    # 第十二步:打印测试数据的batch_size的准确率
    batch = mnist.test.next_batch(batch_size)
    print('test accr %g'%(sess.run(accr, feed_dict={X: batch[0], y: batch[1]})))
  • 相关阅读:
    增加/删除新用户并添加root权限
    LINUX学习之路-1
    了解参考基因组及注释信息
    RNA-seq操作实战
    如何利用数据库下载参考基因组
    RNA-Seq比对软件HISAT2的用法
    小白-批量下载SRR数据
    sratoolkit 的使用
    批量查看QC结果的工具----multiqc
    fastQC 质控结果解读
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10520637.html
Copyright © 2011-2022 走看看