Tensorflow學習 優化器

2021-10-08 23:35:12 字數 3148 閱讀 3073

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

# 載入資料集

mnist = input_data.read_data_sets(

"mnst_data"

, one_hot=

true

)batch_size =

100# 計算一共多少個批次 //:整除

n_batch = mnist.train.num_examples // batch_size

# 定義兩個placeholder none:過會以乙個批次喂進去,784:28*28(把乙個拉成乙個784的向量) 10:輸出時0-9的10個數

x = tf.placeholder(tf.float32,

[none

,784])

y = tf.placeholder(tf.float32,

[none,10

])# 定義乙個簡單的神經網路(只有輸入層784個神經元,輸出層10個神經元,不用隱層)

# 定義權值

w = tf.variable(tf.zeros(

[784,10

]))# 定義偏向值

b = tf.variable(tf.zeros([10

]))# 通過softmax函式轉化為概率值

prediction = tf.nn.softmax(tf.matmul(x, w)

+ b)

# 二次代價函式

# loss = tf.reduce_mean(tf.square(y - prediction))

# 對數似然代價函式(加快收斂的速度):label:真實標籤值,logits:**值,需要求下平均值

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction)

)# 使用隨機梯度下降法進行優化:是loss最小化,學習率:0.2

# train_step = tf.train.gradientdescentoptimizer(0.2).minimize(loss)

# 更換優化器

train_step = tf.train.adamoptimizer(

0.001

).minimize(loss)

# 初始化變數

init = tf.global_variables_initializer(

)# 判斷真實值與**值是否相同(布林型別),相同返回true

# tf.arg_max(prediction,1):求概率最大的數在哪個位置,相當於他的標籤(返回一維張量中最大的值所在的位置)

correct_prediction = tf.equal(tf.argmax(y,1)

, tf.arg_max(prediction,1)

)# 求準確率:cast:將bool型別轉換成32位float型別,然後求乙個平均值(true=1,false=0)

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)

)# 進行訓練

with tf.session(

)as sess:

# 初始化變數

sess.run(init)

# 訓練次數:迭代21次

for step in

range(21

):for batch in

range

(n_batch)

: batch_xs, batch_ys = mnist.train.next_batch(batch_size)

# 把資料餵給它進行訓練

sess.run(train_step, feed_dict=

) acc = sess.run(accuracy, feed_dict=

)print

("iter"

+str

(step)

+",testing accuracy:"

+str

(acc)

)

執行結果:

2020-08

-0320:

28:43.088943

: i tensorflow/core/common_runtime/gpu/gpu_device.cc:

1165

]

iter0,testing accuracy:0.8999

iter1,testing accuracy:0.9123

iter2,testing accuracy:0.9164

iter3,testing accuracy:0.9195

iter4,testing accuracy:0.9219

iter5,testing accuracy:0.9241

iter6,testing accuracy:0.9255

iter7,testing accuracy:0.9273

iter8,testing accuracy:0.9273

iter9,testing accuracy:0.929

iter10,testing accuracy:0.9296

iter11,testing accuracy:0.93

iter12,testing accuracy:0.9296

iter13,testing accuracy:0.9305

iter14,testing accuracy:0.9307

iter15,testing accuracy:0.9297

iter16,testing accuracy:0.9322

iter17,testing accuracy:0.9313

iter18,testing accuracy:0.9317

iter19,testing accuracy:0.9308

iter20,testing accuracy:0.9319

process finished with exit code 0

tensorflow(五) 優化器

一 基礎知識 1.損失函式 損失函式是評估特定模型引數和特定輸入時,表達模型輸出的推理值與真實值之間不一致程度的函式。形式化定義如下 其中xi是樣本,是模型引數,f xi 是模型 的值,y i是真實的測試資料。f xi 越接近y i,說明模型擬合越的接近真實值。常見的損失函式有平方損失函式 交叉熵損...

tensorflow的優化器比較

標準梯度下降法 彙總所有樣本的總誤差,然後根據總誤差更新權值 隨機梯度下降 隨機抽取乙個樣本誤差,然後更新權值 每個樣本都更新一次權值,可能造成的誤差比較大 批量梯度下降法 相當於前兩種的折中方案,抽取乙個批次的樣本計算總誤差,比如總樣本有10000個,可以抽取1000個作為乙個批次,然後根據該批次...

tensorflow中的優化器

1.tf.train.gradientdescentoptimizer 標準梯度下降優化器 標準梯度下降先計算所有樣本彙總誤差,然後根據總誤差來更新權值 2.tf.train.adadeltaoptimizer adadelta優化器,在sgd的基礎上 3.tf.train.adagradoptim...