1. 程式人生 > >tensorflow學習筆記(北京大學) tf4_2.py 完全解析

tensorflow學習筆記(北京大學) tf4_2.py 完全解析

#coding:utf-8
#tensorflow學習筆記(北京大學) tf4_2.py 完全解析
#QQ群:476842922(歡迎加群討論學習)
#酸奶成本1元, 酸奶利潤9元
#預測少了損失大,故不要預測少,故生成的模型會多預測一些
#0匯入模組,生成資料集
import tensorflow as tf
import numpy as np
BATCH_SIZE = 8
SEED = 23455#隨機種子
COST = 1#花費
PROFIT = 9#成本

rdm = np.random.RandomState(SEED)#基於seed產生隨機數
X = rdm.rand(
32,2)#隨機數返回32行2列的矩陣 表示32組 體積和重量 作為輸入資料集 Y = [[x1+x2+(rdm.rand()/10.0-0.05)] for (x1, x2) in X] #1定義神經網路的輸入、引數和輸出,定義前向傳播過程。 x = tf.placeholder(tf.float32, shape=(None, 2))#佔位 y_ = tf.placeholder(tf.float32, shape=(None, 1))#佔位 w1= tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))#正態分佈 y = tf.matmul(
x, w1)#點積 #2定義損失函式及反向傳播方法。 # 定義損失函式使得預測少了的損失大,於是模型應該偏向多的方向預測。 #tf.where:如果condition對應位置值為True那麼返回Tensor對應位置為x的值,否則為y的值. #where(condition, x=None, y=None,name=None) loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_)*COST, (y_ - y)*PROFIT)) train_step = tf.train.GradientDescentOptimizer(0.001).minimize(
loss)#隨機梯度下降 #3生成會話,訓練STEPS輪。 with tf.Session() as sess: init_op = tf.global_variables_initializer()#初始化 sess.run(init_op)#初始化 STEPS = 3000 for i in range(STEPS):#三千輪 start = (i*BATCH_SIZE) % 32 #8個數據 為一個數據塊輸出 end = (i*BATCH_SIZE) % 32 + BATCH_SIZE #[i:i+8] sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})#訓練 if i % 500 == 0:#每500輪列印輸出 print "After %d training steps, w1 is: " % (i)#列印i print sess.run(w1), "\n"#列印w1 print "Final w1 is: \n", sess.run(w1)#最終列印w1