學習TensorFlow記錄1
1.搭建前向回饋神經網絡(BP神經網絡)
環境: TensorFlow2.0 python3.7.6
注意:對於TensorFlow2.0不再存在placeholder函數和一些基礎函數,所以在使用的過程中:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
這樣設置TensorFlow2.0取消使用,使用TensorFlow1.x的版本就可以了。
TensorFlow介紹:
TensorFlow是一個基於數據流編程的符號數學系統,被廣泛使用於各種機器學習算法的編程實現,前身是谷歌的神經網絡算法庫。
- 首先搭建一個前項回饋神經網絡
def add_layer(input, in_size, out_size, activation_function=None):
"""
:param input:數據輸入
:param in_size:輸入數據的大小(第一層神經元個數)
:param out_size:輸出數據的大小(本層神經元個數)
:param activation_function:激活函數
:return:
"""
Weight = tf.Variable(tf.random_normal([in_size, out_size])) # 首次隨機權重
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 偏置初始化
W_mul_x_plus_b = tf.matmul(input, Weight) + biases # 卷積核運算
if activation_function is None:
output = W_mul_x_plus_b
else:
output = activation_function(W_mul_x_plus_b)
return output
定義輸入數據:
x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) + 1 + noise
添加噪音noise
定義輸入數據格式:
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
定義一個隱含層,含有十個神經元
hidden_layer1 = add_layer(xs, 1, 10,activation_function=tf.nn.relu)
定義一個輸出層,輸出層含有一個神經元
prediction = add_layer(hidden_layer1, 10, 1, activation_function=None)
接下來,定義訓練過程進行訓練
- 定義損失函數
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
- 定義訓練過程,使用梯度下降法使得loss達到最小,學習率設爲0.1
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
- 變量的初始化
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
- 進行訓練
for i in range(1000):
# 訓練迭代
sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
if i % 100 == 0:
# 輸出當前loss 的值
print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
# 關閉訓練
sess.close()
總代碼如下:
# coding=gbk
# 搭建一個前項回饋神經網絡
# 模擬一個曲線方程
# 創建一個神經網絡層
import pandas as pd
import tensorflow.compat.v1 as tf
import numpy as np
import matplotlib.pyplot as plt
def add_layer(input, in_size, out_size, activation_function=None):
"""
:param input:數據輸入
:param in_size:輸入數據的大小(第一層神經元個數)
:param out_size:輸出數據的大小(本層神經元個數)
:param activation_function:激活函數
:return:
"""
Weight = tf.Variable(tf.random_normal([in_size, out_size])) # 首次隨機權重
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 偏置初始化
W_mul_x_plus_b = tf.matmul(input, Weight) + biases # 卷積核運算
if activation_function is None:
output = W_mul_x_plus_b
else:
output = activation_function(W_mul_x_plus_b)
return output
if __name__ == '__main__':
# 創建一個具有輸入層、隱藏層、輸出層的三層神經網絡
# 神經元個數分別爲1,10,1
# 創建輸入數據
tf.disable_v2_behavior()
x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
# print(x_data)
# print(x_data.shape)
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) + 1 + noise
# data = pd.read_csv('housing_s.csv')
# x_data = data.drop(['median_house_value'], axis=1)
# y_data = data['median_house_value'][:, np.newaxis]
print(x_data.shape)
print(y_data.shape)
# 定義數據的格式
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# 定義一個隱含層
hidden_layer1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# 定義一個輸出層 含有一個神經元
prediction = add_layer(hidden_layer1, 10, 1, activation_function=None)
# 定義訓練過程 並 進行訓練
# 求解神經網絡參數
# 1.定義損失函數
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
# 2.定義訓練過程 使用梯度下降法使得誤差最小,學習率爲0.1
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# 變量初始化
init = tf.global_variables_initializer()
sess = tf.Session()
# 執行初始化
sess.run(init)
# 3.進行訓練
for i in range(1000):
# 訓練迭代
sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
if i % 100 == 0:
# 輸出當前loss 的值
print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
# 關閉訓練
sess.close()
執行結果如下: