TensorFlow教程 3 建造神經網路

2021-09-30 14:29:42 字數 3489 閱讀 5520

定義新增神經層的函式def add_layer(),它有四個引數:輸入值、輸入的大小、輸出的大小和激勵函式,我們設定預設的激勵函式是none。

def

add_layer

(inputs, in_size, out_size, activation_function=none):

# 我們設定預設的激勵函式是none。

weights = tf.variable(tf.random_normal([in_size, out_size])) # weights為乙個in_size行, out_size列的隨機變數矩陣

biases = tf.variable(tf.zeros([1, out_size]) + 0.1)

wx_plus_b = tf.matmul(inputs, weights) + biases # 我們定義wx_plus_b, 即神經網路未啟用的值。其中,tf.matmul()是矩陣的乘法

if activation_function is

none:

outputs = wx_plus_b

else:

outputs = activation_function(wx_plus_b)

return outputs

# 完整的構建神經網路並訓練

import tensorflow as tf

import numpy as np

import matplotlib.pyplot as plt

## 定義乙個方法,用於構建神經層(在上次課程中有詳細介紹)

defadd_layer

(inputs, in_size, out_size, activation_function=none):

weights = tf.variable(tf.random_normal([in_size, out_size]))

biases = tf.variable(tf.zeros([1, out_size]) + 0.1)

wx_plus_b = tf.matmul(inputs, weights) + biases

if activation_function is

none:

outputs = wx_plus_b

else:

outputs = activation_function(wx_plus_b)

return outputs

## 主體方法

# 構建所需的資料。 這裡的x_data和y_data並不是嚴格的一元二次函式的關係,因為我們多加了乙個noise,這樣看起來會更像真實情況。

x_data = np.linspace(-1,1,300, dtype=np.float32)[:, np.newaxis]

noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32)

y_data = np.square(x_data) - 0.5 + noise

#資料視覺化,用散點圖畫出真實資料

# plot the real data

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

ax.scatter(x_data, y_data)

plt.ion()#plt原本會暫停程式,加上這句就不會暫停了

plt.show()

# 定義輸入佔位符

# 利用佔位符定義我們所需的神經網路的輸入。 tf.placeholder()就是代表佔位符,這裡的none代表無論輸入有多少都可以,因為輸入只有乙個特徵,所以這裡是1。

xs = tf.placeholder(tf.float32, [none, 1])

ys = tf.placeholder(tf.float32, [none, 1])

#預設乙個輸入(維度1),定義乙個隱藏層 ,乙個輸出層

l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)

prediction = add_layer(l1, 10, 1, activation_function=none)

#定義誤差函式

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))

#選取梯度下降優化器進行訓練 很關鍵的一步,如何讓機器學習提公升它的準確率。tf.train.gradientdescentoptimizer()中的值通常都小於1,這裡取的是0.1,代表以0.1的效率來最小化誤差loss。

train_step = tf.train.gradientdescentoptimizer(0.1).minimize(loss)

#初始化 tensorflow變數,並用會話啟用

init = tf.global_variables_initializer()

sess = tf.session()

sess.run(init)

#開始訓練

#我們讓機器學習1000次。機器學習的內容是train_step, 用 session 來 run 每一次 training 的資料,逐步提公升神經網路的**準確性。 (注意:當運算要用到placeholder時,就需要feed_dict這個字典來指定輸入。)

for i in range(1000):

# to visualize the result and improvement

try:

ax.lines.remove(lines[0])

except exception:

pass

sess.run(train_step, feed_dict=)

if i % 50 == 0:

# to see the step improvement

prediction_value = sess.run(prediction, feed_dict=)

# plot the prediction

lines = ax.plot(x_data, prediction_value, 'r-', lw=5)

plt.pause(0.7)

最後,機器學習的結果為:

tensorflow 中的優化器會有很多不同的種類。最基本, 也是最常用的一種就是gradientdescentoptimizer。

在google搜尋中輸入「tensorflow optimizer」可以看到tensorflow提供了7種優化器:鏈結

更多關係 optimizer 的解釋, 請參考 機器學習-簡介系列 optimizer

安裝TensorFlow教程

1.安裝anaconda 2.建立乙個conda環境,命名為tensorflow conda create n tensorflow3.用以下命令進入conda環境 source activate tensorflow tensorflow 進入tensorflow後的顯示符4.安裝tensorfl...

Tensorflow教程 綜述

如果你是機器學習領域的新手,我們推薦你從本文開始閱讀.本文通過講述乙個經典的問題,手寫數字識別 mnist 讓你對多類分類 multiclass classification 問題有直觀的了解.閱讀教程 如果你已經對其它深度學習軟體比較熟悉,並且也對 mnist 很熟悉,這篇教程能夠引導你對 ten...

tensorflow安裝教程

conda config add channels conda config add channels conda config add channels conda config add channels conda config set show channel urls yes 從 c use...