zoukankan      html  css  js  c++  java
  • 03.TensorFlow逻辑回归

    实验原理:

    逻辑回归可以看作只有一层网络的前向神经网络,并且参数连接的权重只是一个值,而非矩阵。公式为:y_predict=logistic(X*W+b),其中X为输入,W为输入与隐含层之间的权重,b为隐含层神经元的偏置,而logistic为激活函数,一般为sigmoid或者tanh,y_predict为最终预测结果。

    逻辑回归是一种分类器模型,需要函数不断的优化参数,这里目标函数为y_predict与真实标签Y之间的L2距离,使用随机梯度下降算法来更新权重和偏置。

    注意数据集由于时间原因会有变换,要及时更新

    实现代码:

    import tensorflow.compat.v1 as tf
    tf.disable_v2_behavior()
    from tensorflow.examples.tutorials.mnist import input_data
    # 数据导入
    mnist=input_data.read_data_sets("MNIST_data",one_hot=True)
    import os
    os.environ["CUDA_VISIBLE_DEVICES"]="0"
    
    #训练参数
    #Parameters  
    learning_rate=0.01
    training_epochs=25
    batch_size=100
    display_step=1
    
    #构造计算图
    x=tf.placeholder(tf.float32,[None,784])
    y=tf.placeholder(tf.float32,[None,10])
    
    #使用Variable函数,设置模型的初始权重
    W=tf.Variable(tf.zeros([784,10]))
    b=tf.Variable(tf.zeros([10]))
    
    #逻辑回归模型
    pred=tf.nn.softmax(tf.matmul(x,W)+b)
    
    #构造代价函数cost
    cost=tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred),reduction_indices=1))
    
    #梯度下降法求最小值,即最优解
    optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
    
    #初始化变量
    init=tf.global_variables_initializer()
    
    
    with tf.Session() as sess:
        sess.run(init)
    
        for epoch in range(training_epochs):
            avg_cost = 0
            total_batch = int(mnist.train.num_examples / batch_size)
            #loop over all batches  
            for i in range(total_batch):
                batch_xs, batch_ys = mnist.train.next_batch(batch_size)
                # Fit training using batch data  
                _, c = sess.run([optimizer, cost], feed_dict={x: batch_xs, y: batch_ys})
                avg_cost +=c / total_batch
    
            if(epoch + 1)%display_step == 0:
                print("Epoch:", '%04d'% (epoch + 1), "Cost:", "{:.09f}".format(avg_cost))
        print("Optimization Finished!")
    
        correct_prediction=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
    
        #  Calculate accuracy for 3000 examples  
        accuracy =tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
        print("Accuracy:", accuracy.eval({x: mnist.test.images[:3000], y: mnist.test.labels[:3000]}))

    运行结果:

  • 相关阅读:
    手贱!使用django,在数据库直接删除了表
    js中在一个函数中引用另一个函数中的函数,可以这么做
    上传下载文件方式
    阻止form提交数据,通过ajax等上传数据
    一种思路,隐藏input标签,通过label关联
    java 寻找水仙花数
    java 统计素数个数问题
    java 兔子生仔问题
    java 实现读取某个目录下指定类型的文件
    通过java 来实现对多个文件的内容合并到一个文件中
  • 原文地址:https://www.cnblogs.com/cxy0210/p/14478095.html
Copyright © 2011-2022 走看看