人工智能學習概述—快手視頻
人工智能學習57-TF訓練—快手視頻
人工智能學習58-TF訓練—快手視頻
人工智能學習59-TF預測—快手視頻
訓練示例代碼
#導入keras.utils 工具包
import keras.utils
#導入mnist數據集
from keras.datasets import mnist
#引入tensorflow 類庫
import tensorflow.compat.v1 as tf
#關閉tensorflow 版本2的功能,僅使用tensorflow版本1的功能
tf.disable_v2_behavior()
#引用numpy 處理矩陣操作
import numpy as np
#引用圖形處理類庫
import matplotlib.pyplot as plt
import matplotlib
#引入操作系統類庫,方便處理文件與目錄
import os
#避免多庫依賴警告信息
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
#設置tensorflow 訓練模型所在目錄
model_path = '../log/model.ckpt'
#設置神經網絡分類數量,0-9個數字需要10個分類
num_classes = 10
#從數據集mnist裝入訓練數據集和測試數據集,mnist提供load_data方法
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#灰度圖編碼范圍0-255,將編碼歸一化,轉化為0-1之間數值
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
#將訓練和測試標注數據轉化為張量(batch,num_classes)
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
#定義輸入張量,分配地址
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])
#初始化第一層權重W矩陣
w1 = tf.Variable(tf.random_normal([784, 128]))
#初始化第一層偏置B向量
b1 = tf.Variable(tf.zeros([128]))
#定義第一層激活函數輸入值 X*W+B
hc1 = tf.add(tf.matmul(x,w1),b1)
#定義第一層輸出,調用激活函數sigmoid
h1 = tf.sigmoid(hc1)
#初始化第二層權重W矩陣
w2 = tf.Variable(tf.random_normal([128, 10]))
#初始化第二層偏置B向量
b2 = tf.Variable(tf.zeros([10]))
#使用激活函數softmax,預測第二層輸出
pred = tf.nn.softmax(tf.matmul(h1, w2) + b2)
#使用交叉熵定義代價函數
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))
#定義學習率
learn_rate = 0.01
#使用梯度下降法優化網絡
optimizer = tf.train.GradientDescentOptimizer(learn_rate).minimize(cost)
epoch_list = []
cost_list = [] train_epoch = 30
batch_size = 100
display_step = 1
#定義神經網絡模型保存對象
saver = tf.train.Saver()
#觸發tensorflow初始化,為定義變量賦值
init = tf.global_variables_initializer()
#啟動tensorflow會話
with tf.Session() as sess: if os.path.exists('../log/model.ckpt.meta'): saver.restore(sess, model_path) #如果存在網絡模型,在會話中裝入網絡模型 else: sess.run(init) #如果不存在網絡模型,會話執行初始化工作 #循環遍歷每次訓練 for epoch in range(train_epoch): #定義平均損失 avg_cost = 0. #計算總批次 total_batch = int(x_train.shape[0] / batch_size) #循環每批次樣本數據 for i in range(total_batch): #讀取每批次訓練樣本數據 batch_xs = x_train[i*batch_size: (i+1)*batch_size] #讀取每批次訓練標簽樣本數據 batch_ys = y_train[i*batch_size: (i+1)*batch_size] #轉化樣本數據格式,添加第一維度代表樣本數量 batch_xs = np.reshape(batch_xs, (100, -1)) #啟動tensorflow進行樣本數據訓練 _, c = sess.run([optimizer, cost], feed_dict={x: batch_xs, y:
batch_ys}) #累計每批次的平均損失 avg_cost += c / total_batch #記錄平均損失 epoch_list.append(epoch+1) cost_list.append(avg_cost) #每隔display_step次訓練,輸出一次統計信息 if (epoch+1) % display_step == 0: print('Epochs: ','%04d' % (epoch+1), 'Costs ',
'{:.9f}'.format(avg_cost)) print('Train Finished') #保存tensorflow訓練的模型
save_dir = saver.save(sess, model_path)
print('TensorFlow model save as file %s' % save_dir)
#圖形顯示訓練結果
matplotlib.rcParams['font.family'] = 'SimHei'
plt.plot(epoch_list, cost_list, '.')
plt.title('Train Model')
plt.xlabel('Epoch')
plt.ylabel('Cost')
plt.show()
測試示例代碼
#導入keras.utils 工具包
import keras.utils
#導入mnist數據集
from keras.datasets import mnist
#引入tensorflow 類庫
import tensorflow.compat.v1 as tf
#關閉tensorflow 版本2的功能,僅使用tensorflow版本1的功能
tf.disable_v2_behavior()
#引用圖形處理類庫
import matplotlib.pyplot as plt
#引用numpy處理矩陣操作
import numpy as np
#引入操作系統類庫,方便處理文件與目錄
import os
#避免多庫依賴警告信息
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
#設置tensorflow 訓練模型所在目錄
model_path = '../log/model.ckpt'
#設置神經網絡分類數量,0-9個數字需要10個分類
num_classes = 10
#從數據集mnist裝入訓練數據集和測試數據集,mnist提供load_data方法
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#灰度圖編碼范圍0-255,將編碼歸一化,轉化為0-1之間數值
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
#將訓練和測試標注數據轉化為張量(batch,num_classes)
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
#定義輸入張量,分配地址
x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])
#初始化第一層權重W矩陣
w1 = tf.Variable(tf.random_normal([784, 128]))
#初始化第一層偏置B向量
b1 = tf.Variable(tf.zeros([128]))
#定義第一層激活函數輸入值 X*W+B
hc1 = tf.add(tf.matmul(x,w1),b1)
#定義第一層輸出,調用激活函數sigmoid
h1 = tf.sigmoid(hc1)
#初始化第二層權重W矩陣
w2 = tf.Variable(tf.random_normal([128, 10]))
#初始化第二層偏置B向量
b2 = tf.Variable(tf.zeros([10]))
#使用激活函數softmax,預測第二層輸出
pred = tf.nn.softmax(tf.matmul(h1, w2) + b2)
#測試樣本集數量
test_num = x_test.shape[0]
#定義獲取隨機整數函數,返回0- test_num
def rand_int():
rand = np.random.RandomState(None)
return rand.randint(low=0, high=test_num)
#定義神經網絡模型保存對象
saver = tf.train.Saver()
n = rand_int()
#啟動tensorflow 會話
with tf.Session() as sess:
#在會話中裝入網絡模型
saver.restore(sess, model_path)
#讀取測試樣本數據
batch_xs = x_test[n: n+2]
#讀取測試標簽樣本數據
batch_ys = y_test[n: n+2]
#轉化樣本數據格式,添加第一維度代表樣本數量
batch_xs = np.reshape(batch_xs, (2, -1))
#定義模型預測輸出概率最大品類
output = tf.argmax(pred, 1)
#使用模型預算
outputv, predv = sess.run([output, pred], feed_dict={x: batch_xs})
#圖形輸出
plt.figure(figsize=(2, 3))
for i in range(batch_xs.ndim):
plt.subplot(1, 2, i+1)
plt.subplots_adjust(wspace=2)
t = batch_xs[i].reshape(28, 28)
plt.imshow(t, cmap='gray')
if outputv[i] == batch_ys[i].argmax():
plt.title('%d,%d'
%
color='green')
else:
(outputv[i],
batch_ys[i].argmax()),
plt.title('%d,%d' % (outputv[i], batch_ys[i].argmax()), color='red')
plt.xticks([])
plt.yticks([])
plt.show()