機器學習個人筆記,學習中水平有限,內容如有缺漏歡迎指正。
神經網路是一組計算單元組成的網路,其中每個計算單元(模擬了生物界的神經)從輸入通道獲取一些資訊,進行一些計算然後將結果傳到輸出通道,最後在神經網路的輸出端獲得總的計算結果。
單個神經元的結構:
神經元做的計算通常是將輸入的a1~an乘上對應的權重w1~wn(一般還要加乙個a0、w0作為偏置項),然後求和,再將和輸入乙個被稱為啟用函式的函式,獲得的結果作為下一層神經元的輸入或直接作為神經網路的輸出。這樣的神經網路又被稱為「前饋神經網路」,因為它的計算過程是從輸入層逐層計算到輸出層的。
首先匯入包
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
用來新增一層網路的函式
def
add_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#wx+b,簡明易懂
if activation_function is
none
:#如果沒有啟用函式,神經元就直接返回wx+b
outputs = wx_plus_b
else
: outputs = activation_function(wx_plus_b)
return outputs
建立訓練用的資料
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)
-0.5
+ noise #y=x^2-0.5+雜訊
為tensorflow定義佔位符
xs = tf.placeholder(tf.float32,
[none,1
])ys = tf.placeholder(tf.float32,
[none,1
])
新增乙個隱藏層輸出層
#新增隱藏層
l1 = add_layer(xs,1,
10, activation_function=tf.nn.relu)
# 新增輸出層
prediction = add_layer(l1,10,
1, activation_function=
none
)
定義損失值和訓練步驟
#計算損失值,損失值定義為(y-**值)^2的
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction)
, reduction_indices=[1
]))#使用梯度下降定義訓練步驟來最小化損失值
train_step = tf.train.gradientdescentoptimizer(
0.1)
.minimize(loss)
初始化tensorflow的計算圖
init = tf.initialize_all_variables(
)sess = tf.session(
)sess.run(init)
繪圖
fig = plt.figure(
)ax = fig.add_subplot(1,
1,1)
ax.scatter(x_data, y_data)
plt.ion(
)plt.show(
)
訓練1000次
for i in
range
(1000):
sess.run(train_step, feed_dict=
)if i %
50==0:
#每50步計算一次損失值並繪圖
try:
ax.lines.remove(lines[0]
)except exception:
pass
prediction_value = sess.run(prediction, feed_dict=
) loss_value=sess.run(loss,feed_dict=
)# plot the prediction
plt.title(loss_value)
lines = ax.plot(x_data, prediction_value,
'r-'
, lw=5)
plt.pause(
0.1)
plt.pause(
10)
完整**就不放了,在下面的鏈結裡可以找到。
紅色為擬合的曲線,藍色為樣本點
前饋神經網路公式,其中θ(1)11代表第一層第乙個神經元輸出作為隱藏層第乙個神經元輸入的權重,x0(圖中未出現)代表偏置項,是個常數。
tensorflow建立神經網路
部分**
機器學習之神經網路
機器學習是一門致力於研究如何通過計算的手段,利用經驗來改善系統自身的效能。經驗通常以資料的形式存在,因此機器學習所研究的主要內容是關於在計算機上從資料中產生 模型 的演算法,即 學習演算法 有了學習演算法,將經驗資料提供給它,它就能基於這些資料產生模型 當面對新情況時,模型會給我們提供相應的判斷。一...
機器學習之神經網路NN
神經網路 neural network 以人腦中的神經網路為啟發而產生的,最著名對的演算法是backpropagation bp 演算法。可用來解決分類問題,也可用來解決回歸問題 詳情見前言 多層向前神經網路中使用了bp演算法 多層向前神經網路的組成,每一層由單元組成 圖中小圈圈 輸入層 由訓練集的...
python機器學習之神經網路 三
來自 前面兩篇文章都是參考書本神經網路的原理,一步步寫的 這篇博文裡主要學習了如何使用neurolab庫中的函式來實現神經網路的演算法。首先介紹一下neurolab庫的配置 neurolab需要採用python安裝第三方軟體包的方式進行安裝,這裡介紹一種安裝方式 1 進入cmd視窗 2 進入解壓檔案...