莫煩Tensorflow 建造自己的NN

2022-06-24 11:33:08 字數 4882 閱讀 5145

1 定義 add_layer()

定義乙個新增層的函式可以很容易的新增神經層

神經層裡常見的引數通常有weightsbiases和激勵函式

【權重   偏置   啟用函式】

import

tensorflow as tf

#輸入值、輸入的大小、輸出的大小和激勵函式,我們設定預設的激勵函式是none

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

### 定義weights和biases ###

#在生成初始引數時,隨機變數(normal distribution)會比全部為0要好很多,所以我們這裡的weights為乙個in_size行, out_size列的隨機變數矩陣

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

#機器學習中,biases的推薦值不為0

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

#定義網路未啟用的值

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

tf.matmul()是矩陣的乘法

#激勵函式為none時,輸出就是當前的**值——w*x + b

#不為none時,就把 w*x + b 傳到 activation_function() 函式中得到輸出

if activation_function is

none:

outputs =wx_plus_b

else

: outputs =activation_function(wx_plus_b)

return

outputs

2 匯入資料

#

## 構建所需要的資料 ###

#引入了 noise,使得x_data 和 y_data 不是標準的一元二次函式關係

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

#利用佔位符定義我們所需的神經網路的輸入

#tf.placeholder()就是代表佔位符,這裡的none代表無論輸入有多少都可以

#因為輸入只有乙個特徵,所以這裡是1

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

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

3 搭建網路

#

## 定義神經層 ###

#通常神經層都包括輸入層、隱藏層和輸出層

#這裡,輸入層1個、隱藏層10個、輸出層1個的神經網路

#隱藏層 【啟用函式 tf.nn.relu】

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

#輸出層

#輸入就是隱藏層的輸出——l1,輸入有10層(隱藏層的輸出層),輸出有1層

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

#計算誤差

#平方求和再取平均

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

#提公升準確率

#代表以0.1的效率來最小化誤差loss

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

#變數初始化

init = tf.global_variables_initializer() #

替換成這樣就好

#定義session 【只有session.run()才會執行我們定義的運算】

sess =tf.session()

sess.run(init)

4 訓練

for i in range(1000):

#機器學習的內容是train_step, 用 session 來 run 每一次 training 的資料,逐步提公升神經網路的**準確性

sess.run(train_step, feed_dict=)

if i % 50 ==0:

#to see the step improvement

print(sess.run(loss, feed_dict=))

全部**

import

tensorflow as tf

import

numpy as np

#輸入值、輸入的大小、輸出的大小和激勵函式,我們設定預設的激勵函式是none

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

### 定義weights和biases ###

#在生成初始引數時,隨機變數(normal distribution)會比全部為0要好很多,所以我們這裡的weights為乙個in_size行, out_size列的隨機變數矩陣

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

#機器學習中,biases的推薦值不為0

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

#定義網路未啟用的值

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

tf.matmul()是矩陣的乘法

#激勵函式為none時,輸出就是當前的**值——w*x + b

#不為none時,就把 w*x + b 傳到 activation_function() 函式中得到輸出

if activation_function is

none:

outputs =wx_plus_b

else

: outputs =activation_function(wx_plus_b)

return

outputs

### 構建所需要的資料 ###

#引入了 noise,使得x_data 和 y_data 不是標準的一元二次函式關係

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

#利用佔位符定義我們所需的神經網路的輸入

#tf.placeholder()就是代表佔位符,這裡的none代表無論輸入有多少都可以

#因為輸入只有乙個特徵,所以這裡是1

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

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

### 定義神經層 ###

#通常神經層都包括輸入層、隱藏層和輸出層

#這裡,輸入層1個、隱藏層10個、輸出層1個的神經網路

#隱藏層 【啟用函式 tf.nn.relu】

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

#輸出層

#輸入就是隱藏層的輸出——l1,輸入有10層(隱藏層的輸出層),輸出有1層

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

#計算誤差

#平方求和再取平均

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

#提公升準確率

#代表以0.1的效率來最小化誤差loss

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

#變數初始化

init = tf.global_variables_initializer() #

替換成這樣就好

#定義session 【只有session.run()才會執行我們定義的運算】

sess =tf.session()

sess.run(init)

for i in range(1000):

#機器學習的內容是train_step, 用 session 來 run 每一次 training 的資料,逐步提公升神經網路的**準確性

sess.run(train_step, feed_dict=)

if i % 50 ==0:

#to see the step improvement

print(sess.run(loss, feed_dict=))

莫煩 Tensorflow 變數

理解了tensorflow必須通過session去run才能輸出值,如果不通過session,那麼只能得到變數名字和型別,加深理解了tensorflow的機制。import tensorflow as tf state tf.variable 0,name counter print state 輸...

莫煩Tensorflow 入門

tensorflow 初步嘗試 建立資料 搭建模型 計算誤差 傳播誤差 初始會話 不斷訓練 import tensorflow as tf import numpy as np 建立資料 x data np.random.rand 100 astype np.float32 y data x dat...

莫煩tensorflow系列教程學習

1.普通機器學習 函式係數 y 0.1x 0.3 coding gbk import tensorflow as tf import numpy as np 生成資料,y 0.1x 0.3 x data np.random rand 100 astype np.float32 y data x da...