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...