主要步驟:
1.準備資料
2.搭建網路
3.引數優化
4.測試效果
**:
import執行結果:tensorflow as tf
from sklearn import
datasets
from matplotlib import
pyplot as plt
import
numpy as np
#匯入輸入特徵和標籤
x_data =datasets.load_iris().data
y_data =datasets.load_iris().target
#隨機打亂資料
#使用相同的隨機種子,保證輸入特徵和標籤一一對應
np.random.seed(116)
np.random.shuffle(x_data)
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)
#將打亂後的資料分割為訓練集(前120行)和測試集(後30行)
x_train = x_data[:-30]
y_train = y_data[:-30]
x_test = x_data[-30:]
y_test = y_data[-30:]
#轉換x的資料型別,保證後面矩陣相乘時資料型別一致
x_train =tf.cast(x_train, tf.float32)
x_test =tf.cast(x_test, tf.float32)
#將輸入特徵和標籤一一配對
#每32組資料,打包一次,分批次餵入神經網路
train_db = tf.data.dataset.from_tensor_slices((x_train, y_train)).batch(32)
test_db = tf.data.dataset.from_tensor_slices((x_test, y_test)).batch(32)
#宣告神經網路的引數
#4個輸入特徵,3個分類,故輸入層為4個輸入節點,輸出層為3個神經元
w1 = tf.variable(tf.random.truncated_normal([4, 3], stddev=0.1, seed=1))
b1 = tf.variable(tf.random.truncated_normal([3], stddev=0.1, seed=1))
#學習率
lr = 0.2
#記錄每輪訓練後的loss,為後續畫loss曲線提供引數
train_loss_results =
#記錄每輪訓練後的正確率
test_acc =
#將資料餵入神經網路500次
epoch = 500
#因為資料分批次餵入神經網路,所以需要求和
loss_all =0
#資料集級別的迴圈,每個epoch餵入一次資料集
for epoch in
range(epoch):
#batch級別的迴圈,每個step餵入乙個batch
for step, (x_train, y_train) in
enumerate(train_db):
with tf.gradienttape() as tape:
#神經網路乘加操作
y = tf.matmul(x_train, w1) +b1
#使y符合概率分布,與獨熱碼同級,相減可求loss
y =tf.nn.softmax(y)
#將標籤轉換為獨熱碼格式,方便計算loss和accuracy
y_ = tf.one_hot(y_train, depth=3)
#使用均方誤差損失函式
loss = tf.reduce_mean(tf.square(y_ -y))
#將每個step計算出來的loss累加
loss_all +=loss.numpy()
#計算loss對各引數的導數
grads =tape.gradient(loss, [w1, b1])
#引數w1和b1自更新
w1.assign_sub(lr *grads[0])
b1.assign_sub(lr * grads[1])
#輸出每次訓練的loss
#因為有4組batch,所以除以4
print("
epoch:%d loss:%f
" % (epoch, loss_all/4))
#記錄每次訓練的loss,方便後面繪製loss變化曲線圖
#歸零,方便下次統計
loss_all =0
#呼叫測試資料,統計正確率
#total_correct為正確個數, total_number為測試總數
#注意,此時仍為batch級別的迴圈,每次迴圈,餵入乙個batch
total_correct, total_number =0, 0
for x_test, y_test in
test_db:
#使用更新後的引數進行**
y = tf.matmul(x_test, w1) +b1
y =tf.nn.softmax(y)
#返回y中最大值的索引,即**的分類
pred = tf.argmax(y, axis=1)
#將pred轉換成y_test的型別
pred = tf.cast(pred, dtype=y_test.dtype)
#將bool型別轉換成int型別,若分類正確correct=1,否則為0
correct = tf.cast(tf.equal(pred, y_test), dtype=tf.int32)
#計算每個batch中的correct數
correct =tf.reduce_sum(correct)
#將所有batch中的correct數加起來
total_correct +=int(correct)
#x_test有多少行,每個batch就有多少樣本
total_number +=x_test.shape[0]
acc = total_correct/total_number
print("
test_acc:%f
" %acc)
print("
****************")
#繪製 loss 曲線
plt.title('
loss function curve
') #
標題plt.xlabel('
epoch
') #
x軸變數名稱
plt.ylabel('
loss
') #
y軸變數名稱
plt.plot(train_loss_results, label="
$loss$
") #
逐點畫出trian_loss_results值並連線,連線圖示是loss
plt.legend() #
畫出曲線圖示
plt.show() #
畫出影象
#繪製 accuracy 曲線
plt.title('
acc curve
') #
標題plt.xlabel('
epoch
') #
x軸變數名稱
plt.ylabel('
acc') #
y軸變數名稱
plt.plot(test_acc, label="
$accuracy$
") #
逐點畫出test_acc值並連線,連線圖示是accuracy
plt.legend()
plt.show()
基於tensorflow的神經網路簡單例項
通過構建乙個簡單的擬合直線的神經網路來簡單的講解基於tensorflow框架的神經網路構建方法。講解簡單的使用tensorboard來展示 分析神經網路流圖的方法。coding utf 8 呼叫tensorflow import tensorflow as tf import numpy as np...
Tensorflow卷積神經網路
卷積神經網路 convolutional neural network,cnn 是一種前饋神經網路,在計算機視覺等領域被廣泛應用.本文將簡單介紹其原理並分析tensorflow官方提供的示例.關於神經網路與誤差反向傳播的原理可以參考作者的另一篇博文bp神經網路與python實現.卷積是影象處理中一種...
Tensorflow 深層神經網路
維基百科對深度學習的定義 一類通過多層非線性變換對高複雜性資料建模演算法的合集.tensorflow提供了7種不同的非線性啟用函式,常見的有tf.nn.relu,tf.sigmoid,tf.tanh.使用者也可以自己定義啟用函式.3.1.1 交叉熵 用途 刻畫兩個概率分布之間的距離,交叉熵h越小,兩...