TensorFlow之四(将准确度提升至98%(optimizer、lr))

TensorFlow第四课如何将准确度提升至98%

如何将准确度提升至98%以上,在这里使用到了优化器的选择以及学习率的设置

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 22 14:51:33 2018
如何将准确度提升至98以上
@author: dj
"""
import tensorflow as tf 
from tensorflow.examples.tutorials.mnist import input_data

#载入数据集
mnist=input_data.read_data_sets("MNIST_data",one_hot=True)

#每个批次的大小
batch_size=100
#计算一共有多少个批次
n_batch=mnist.train.num_examples//batch_size
#定义两个placeholder
x=tf.placeholder(tf.float32,[None,784])#一张图片拉为784列,行不确定none为100,下一步对none进行赋值
y=tf.placeholder(tf.float32,[None,10])#标签0-910个数
keep_prob=tf.placeholder(tf.float32)#用来设置的dropout
lr=tf.Variable(0.001,dtype=tf.float32)
#创建一个神经网络
#初始化环节
W1=tf.Variable(tf.truncated_normal([784,500],stddev=0.1))
b1=tf.Variable(tf.zeros([500])+0.1)#偏置初始化可以调为0.1
l1=tf.nn.tanh(tf.matmul(x,W1)+b1)
l1_drop=tf.nn.dropout(l1,keep_prob)

W2=tf.Variable(tf.truncated_normal([500,300],stddev=0.1))
b2=tf.Variable(tf.zeros([300])+0.1)
l2=tf.nn.tanh(tf.matmul(l1_drop,W2)+b2)
l2_drop=tf.nn.dropout(l2,keep_prob)

W3 = tf.Variable(tf.truncated_normal([300,10],stddev=0.1))
b3 = tf.Variable(tf.zeros([10])+0.1)
prediction = tf.nn.softmax(tf.matmul(l2_drop,W3)+b3)
#二次代价函数
#loss=tf.reduce_mean(tf.square(y-prediction))
#交叉熵损失
loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))
#定义一个梯度下降发进行训练的优化器学习率0.2
#optimizer=tf.train.GradientDescentOptimizer(0.1)
optimizer=tf.train.AdamOptimizer(1e-2)#0.01
#最小化代价函数
train_step=optimizer.minimize(loss)

init=tf.global_variables_initializer()

#求准确率的方法,结果存放在一个布尔型列表中
correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回函数中最大的值所在的位置
#求准确率
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
with tf.Session() as sess:
    sess.run(init)
    #所有图片训练21次
    for epoch in range(50):
        sess.run(tf.assign(lr,0.001*(0.95**epoch)))#这里使用每将所有图片训练一次后对学习率乘0.95,改变学习率
        for batch in range(n_batch):#所有循环一次
            batch_xs,batch_ys=mnist.train.next_batch(batch_size)
            sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:1.0})#keep_prob:1.0没有用到dropout
        
        learning_rate=sess.run(lr)
        acc=sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})
        
        print('iter '+str(epoch)+'testing Accuracy '+str(acc)+',learning_rate '+str(learning_rate))  
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TensorFlow优化器是一种用于训练神经网络的算法,它可以自动调整模型参数以最小化损失函数。TensorFlow提供了多种优化器,包括梯度下降、Adam、Adagrad等。这些优化器可以根据不同的场景和需求进行选择和调整,以提高模型的性能和效率。 ### 回答2: TensorFlow中的优化器(Optimizer)是一个用于优化神经网络模型的算法。它帮助我们根据训练数据来更新模型的参数,使得模型的预测结果更加准确。TensorFlow提供了多种优化器,每个优化器都有自己的特点和适用场景。 其中最常用的优化器之一是梯度下降法(Gradient Descent)。梯度下降法通过计算参数的梯度,并按照其相反方向调整参数的值,以最小化训练数据的损失函数。TensorFlow中的GradientDescentOptimizer就是梯度下降法的一种实现。我们可以通过指定学习率(learning rate)来控制参数的调整速度。 除了梯度下降法外,TensorFlow还提供了其他的优化器,如Adam、Adagrad、RMSProp等。这些优化器在不同的场景下可能表现更好,具体选择哪个优化器取决于模型和数据的特点。 优化器的使用非常简单,我们可以先定义一个优化器对象,然后在训练过程中调用其minimize方法,传入损失函数和要优化的参数。优化器会自动计算梯度并更新模型参数。 除了基本的优化器,TensorFlow还提供了其他辅助类来帮助优化模型。例如,tf.train.exponential_decay可以根据训练步数自动降低学习率,以提高训练效果。另外,tf.train.Checkpoint和tf.train.Saver可以用来保存和恢复模型的参数,方便模型的训练和使用。 总而言之,TensorFlow的优化器是用于优化神经网络模型的重要工具。通过选择合适的优化器和调整参数,我们能够更好地训练模型,提高预测性能。 ### 回答3: TensorFlow中的optimizer是一种用于优化神经网络模型参数的工具。在深度学习中,优化器扮演着重要的角色,它的作用是通过调整模型的权重和偏差,使模型的损失函数最小化。 TensorFlow提供了多种不同的优化器,包括随机梯度下降(SGD)、Adam、Adagrad等。这些优化器的实现基于不同的算法和原理,每个优化器都具有不同的特性和适用场景。 使用优化器有几个关键步骤。首先,需要定义一个损失函数,通常是模型的预测值与实际标签之间的差异。然后,选择一个合适的优化器,并设置适当的超参数如学习率等。接下来,通过调用optimizer的minimize或apply_gradients函数,计算和应用梯度更新。这样,模型的参数就会根据损失函数的梯度进行更新。最后,循环执行该过程,直到达到某个停止条件。 优化器的选择取决于具体的问题和数据。例如,SGD是最简单的优化器之一,适用于大规模数据集,但收敛速度相对较慢。Adam是一种基于自适应矩估计的优化器,可以在不同的学习率下自动调整梯度。Adagrad则根据参数历史梯度的平方和自动调整学习率。 总之,TensorFlow的优化器是优化神经网络模型参数的重要工具,对模型的训练和性能具有重要影响。选择合适的优化器和调整超参数是深度学习中的关键步骤,可以帮助改善模型的性能和收敛速度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值