TensorFlow-深度学习-06-梯度下降求解简单的逻辑回归

对于线性模型,
上图是一个mnist手写数据集,如果想要它通过训练被识别出来,需要选定一个模型,用简单的线性模型肯定是走不通的,事实上,现在大部分的数据集都不可能达到一种线性拟合状态,除非是人为自己定义的。所以,这里引出分类的概念,线性模型只有一种情况,当我们有多种结果产生(0,1,2…)时,就需要用到分类了,本节主要记录了使用梯度下降求解逻辑回归的案例。

首先谈谈softmax这个函数(激活函数):

Softmax 在机器学习和深度学习中有着非常广泛的应用。尤其在处理多分类(C > 2)问题,分类器最后的输出单元需要Softmax 函数进行数值处理。关于Softmax 函数的定义如下所示:
在这里插入图片描述
在这里插入图片描述
比如上面的图片,左边有3张图片,看第一张图片,它是“猫”的可能性为5,“狗”的可能性为4,“马”的可能性为2,那么把它们利用softmax进行计算:
【1】(2.71)^5 =146.2
【2】(2.71)^4=53.9
【3】(2.71)^2=7.3
【1】/【1】+【2】+【3】=146.2/207.4=0.705左右,同理,一次利用softmax计算出方块内所有的概率。概率最高的即为最相似的值。一般来说,softmax满足以下条件:
在这里插入图片描述

下面看一下实例:
(同样用mnist数据集进行训练)

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("mnist/", one_hot=True)


def logistic_regression():
    x = tf.placeholder(shape=[None, 784], dtype=tf.float32)
    y = tf.placeholder(shape=[None, 10], dtype=tf.float32)

    w = tf.Variable(tf.zeros(shape=[784, 10]), dtype=tf.float32)
    b = tf.Variable(tf.zeros(shape=[1, 10]), dtype=tf.float32)

    y_ = tf.nn.softmax(tf.add(tf.matmul(x, w), b))  # softmax函数分类(概率最大的)

    loss = -tf.reduce_sum(y * tf.log(y_))  # 交叉熵损失函数

    step = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)  # 最小排放错误
    acc_mat = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    acc_ret = tf.reduce_sum(tf.cast(acc_mat, tf.float32))
    init = tf.global_variables_initializer()  # 初始化变量
    with tf.Session() as sess:
        sess.run(init)
        for i in range(10000):
            batch_xs, batch_ys = mnist.train.next_batch(100)  # 小批量训练
            sess.run(step, feed_dict={x: batch_xs, y: batch_ys})  # 喂训练数据
            if (i + 1) % 1000 == 0:
                curr_acc = sess.run(fetches=acc_ret,
                                    feed_dict={x: mnist.test.images[:1000], y: mnist.test.labels[:1000]})  # 喂测试数据
                print("curr_acc:", (curr_acc / 10), "%")
       # print(sess.run(b))


if __name__ == "__main__":
    logistic_regression()

训练结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值