TensorFlow學習記錄1,簡單曲線擬合

學習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是一個基於數據流編程的符號數學系統,被廣泛使用於各種機器學習算法的編程實現,前身是谷歌的神經網絡算法庫。

  1. 首先搭建一個前項回饋神經網絡
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)

接下來,定義訓練過程進行訓練

  1. 定義損失函數
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
  1. 定義訓練過程,使用梯度下降法使得loss達到最小,學習率設爲0.1
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
  1. 變量的初始化
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
  1. 進行訓練
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()

執行結果如下:
在這裏插入圖片描述

發佈了44 篇原創文章 · 獲贊 26 · 訪問量 4360
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章