zoukankan      html  css  js  c++  java
  • Tensorflow-逻辑斯蒂回归

    1.交叉熵

    逻辑斯蒂回归这个模型采用的是交叉熵,通俗点理解交叉熵

    推荐一篇文章讲的很清楚:

    https://www.zhihu.com/question/41252833

    因此,交叉熵越低,这个策略就越好,最低的交叉熵也就是使用了真实分布所计算出来的信息熵,因为此时  ,交叉熵 = 信息熵。这也是为什么在机器学习中的分类算法中,我们总是最小化交叉熵,因为交叉熵越低,就证明由算法所产生的策略最接近最优策略,也间接证明我们算法所算出的非真实分布越接近真实分布

    2.代码解释

     1 import warnings
     2 warnings.filterwarnings('ignore')
     3 import numpy as np
     4 import tensorflow as tf
     5 # 样本集
     6 from tensorflow.examples.tutorials.mnist import input_data
     7 
     8 # 加载数据,目标值变成概率的形式,ont-hot
     9 mnist = input_data.read_data_sets('./',one_hot=True)
    10 # 训练数据 (55000, 784)
    11 mnist.train.images.shape
    12 # 测试数据 (10000, 784)
    13 mnist.test.images.shape
    14 # 目标值 ont-hot形式
    15 mnist.train.labels[:10]
    16 
    17 # 构建方程
    18 X = tf.placeholder(dtype=tf.float64,shape = (None,784),name = 'data')
    19 y = tf.placeholder(dtype=tf.float64,shape = (None,10),name = 'target')
    20 W = tf.Variable(initial_value=tf.zeros(shape =(784,10),dtype = tf.float64))
    21 b = tf.Variable(initial_value=tf.zeros(shape = (10),dtype = tf.float64))
    22 y_pred = tf.matmul(X,W) + b
    23 
    24 # 构建损失函数
    25 # y 和 y_pred对比
    26 # y表示是概率 [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.]
    27 # y_pred,矩阵运算求解的目标值
    28 # 要将y_pred转化成概率,softmax
    29 y_ = tf.nn.softmax(y_pred)
    30 # 此时y和y_表示概率
    31 # y和y_越接近,说明预测函数越准确
    32 # 此时分类问题,交叉熵,表示损失函数
    33 # 熵:表示的系统混乱程度
    34 # 损失函数,越小越好
    35 # 平均交叉熵------->可以比较大小的数
    36 loss = tf.reduce_mean(tf.reduce_sum(tf.multiply(y,tf.log(1/y_)),axis = -1))
    37 
    38 # 最优化
    39 opt = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
    40 
    41 # 训练
    42 # 训练次数
    43 epoches = 100
    44 # 保存
    45 saver = tf.train.Saver()
    46 with tf.Session() as sess:
    47     sess.run(tf.global_variables_initializer())
    48     for i in range(epoches):
    49         c = 0
    50         for j in range(100):
    51 #      一次取550个,分100次取完数据 next_batch方法
    52             X_train,y_train = mnist.train.next_batch(550)
    53             opt_,cost = sess.run([opt,loss],feed_dict = {X:X_train,y:y_train})
    54             c += cost/100
    55 #         计算准确率
    56         X_test,y_test = mnist.test.next_batch(2000)      
    57         y_predict = sess.run(y_,feed_dict={X:X_test})      
    58         y_test = np.argmax(y_test,axis = -1)
    59         y_predict = np.argmax(y_predict,axis = 1)      
    60         accuracy = (y_test == y_predict).mean()
    61         print('执行次数:%d。损失函数是:%0.4f。准确率是:%0.4f'%(i+1,c,accuracy))       
    62         if accuracy > 0.91:
    63             saver.save(sess,'./model/estimator',global_step=i)
    64             print('---------------------------模型保存成功----------------------------')

    保存了模型,在上一次的基础上继续进行学习,这样的话可以直接从上次的准确率开始

     1 # 其实代码是一样的,只是加了个saver.restore还原
     2 with tf.Session() as sess:
     3 #     还原到sess会话中
     4     saver.restore(sess,'./model/estimator-99')
     5     
     6     for i in range(100,200):
     7         c = 0
     8         for j in range(100):
     9             X_train,y_train = mnist.train.next_batch(550)
    10             opt_,cost = sess.run([opt,loss],feed_dict = {X:X_train,y:y_train})
    11             c += cost/100
    12         
    13 #         计算准确率
    14         X_test,y_test = mnist.test.next_batch(2000)
    15         
    16         y_predict = sess.run(y_,feed_dict={X:X_test})
    17         
    18         y_test = np.argmax(y_test,axis = -1)
    19         y_predict = np.argmax(y_predict,axis = 1)
    20         
    21         accuracy = (y_test == y_predict).mean()
    22         print('执行次数:%d。损失函数是:%0.4f。准确率是:%0.4f'%(i+1,c,accuracy))
    23         
    24         if accuracy > 0.91:
    25             saver.save(sess,'./model/estimator',global_step=i)
    26             print('---------------------------模型保存成功----------------------------')


  • 相关阅读:
    数据中心网络架构的问题与演进 — NFV
    数据中心网络架构的问题与演进 — 云网融合与 SD-WAN
    数据中心网络架构的问题与演进 — 混合云与 VPC 专有网络
    数据中心网络架构的问题与演进 — SDN
    数据中心网络架构的问题与演进 — Overlay 网络
    ASP.NET MVC- Controllers and Routing- Controller Overview
    ASP.NET MVC- VIEW Creating Page Layouts with View Master Pages Part 4
    ASP.NET MVC- VIEW Using the TagBuilder Class to Build HTML Helpers Part 3
    ASP.NET MVC- VIEW Creating Custom HTML Helpers Part 2
    ASP.NET MVC- VIEW Overview Part 1
  • 原文地址:https://www.cnblogs.com/xiuercui/p/12018752.html
Copyright © 2011-2022 走看看