### 1. 實現新增層函式
完整的「神經網路」, 包括新增神經層, 計算誤差, 訓練步驟, 判斷是否在學習. 定義乙個新增層的函式可以很容易的新增神經層.
```import tensorflow as tf
def add_layer(inputs, in_size, out_size, activation_function=none):
# 權重: 定義為 in_size 行 out_size 列的矩陣
weights = tf.variable(tf.random_normal([in_size, out_size]))
# 誤差: 1 行 out_size 列 (輸入乙個維度), 推薦不為 0, 所以這裡全給 0.1
biases = tf.variable(tf.zeros([1, out_size]) + 0.1)
# 我們要計算的資料模型: y = inputs * weights + biases
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
引數:
* inputs : 輸入資料
* in_size : 輸入大小
* out_size: 輸出大小
* activation_function: 激勵函式, 預設不使用激勵函式 (none)
### 2. 建造神經網路
1. 構建所需資料
import numpy as np
x_data = np.linspace(-1, 1, 300, dtype=np.float32)
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32)
y_data = np.square(x_data) - 0.5 + noise
我們要構建的是: y = x^2 - 0.5
2. 定義神經網路的輸入
xs = tf.palceholder(tf.float32, [none, 1])
ys = tf.placeholder(tf.float32, [none, 1])
3. 定義神經層
神經層包括輸入層, 隱藏層和輸出層. 輸入層和輸出層的結構一樣, 隱藏層可以自定義屬性個數. 這裡我們構建乙個「1個 輸入層, 10 個隱藏層, 1 個輸出層的神經網路」.
l1 = add_layer(xs, 1, 10, acitvation_function=tf.nn.relu)
prediction = add_layer(l1, 10, 1, activation_function=none)
4. 計算誤差並優化
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction)),
reduction_indices=[1])
train_step = tf.train.gradientdescentoptimizer(0.1).minimize(loss)
### 3. 讓機器開始學習
init_op = tf.global_variables_initializer()
with tf.session() as sess:
sess.run(init_op)
for i range(1000):
# 1000 次的學習訓練, 記得佔位符要填充值
sess.run(train_step, feed_dict=)
# 當然要輸出來看一下學的怎麼樣了 (看的是誤差, 50步來一次怎麼樣)
if 0 == i % 50:
print(sess.run(loss, feed_dict=))
***完整**:
import tensorflow as tf
import numpy as np
def add_layer(inputs, in_size, out_size, activation_function=none):
weight = tf.variable(tf.random_normal([in_size, out_size]))
biases = tf.variable(tf.zeros([1, out_size]) + 0.1) # biases not 0 is good
wx_plus_b = tf.matmul(inputs, weight) + biases
# if activation function is none or not:
if activation_function is none:
outputs = wx_plus_b
else:
outputs = activation_function(wx_plus_b)
return outputs
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
xs = tf.placeholder(tf.float32, [none, 1])
ys = tf.placeholder(tf.float32, [none, 1])
layer1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # hidden layer
prediction = add_layer(layer1, 10, 1, activation_function=none) # output layer
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
reduction_indices=[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):
# training
sess.run(train_step, feed_dict=)
if 0 == i % 50:
print(sess.run(loss, feed_dict=))
sess.close()
* 輸出:
0.555579
0.00811244
0.00558974
0.00454906
0.00409126
0.0037941
0.00361542
0.00350574
0.00342049
0.00335584
0.00330608
0.00326254
0.00322398
0.00318576
0.00315625
0.00313178
0.00311166
0.00309352
0.00307576
0.00305789
構建第乙個神經網路
莫煩python 使用軟體anaconda3 import tensorflow as tf import numpy as np 匯入模組以後,構建乙個新增神經網路層的函式 add layer 其中需要設定的神經網路層的變數為輸入輸出和激勵函式,同時需要告知函式輸入輸出的大小 size def a...
建造第乙個神經網路
importtensorflowastf defadd layer inputs,in size,out size,activation function none 他有四個引數 輸入值,輸入的大小,輸出的大小,激勵函式 此處設定為none weights tf.variable tf.random...
自己的第乙個神經網路
最近一直在研究神經網路,於是週末空閒之餘通過一篇文章的啟發製作了乙個3層神經網路,用來計算加法 兩個輸入,3個隱含,1個輸出 訓練5000000次後效果還是不錯的,幾乎可以計算所有和小於10的加法了。import numpy as np import random def sigmoid x ret...