參考資料:
單隱層前饋網路結構:
問題描述:**天氣氣溫,當輸入連續三小時的氣溫時,**第四個小時的氣溫。
資料:訓練集為20 * 24小時氣溫資料,測試集為10 * 24小時資料。
網路結構為:3 * 7 * 1,即三個輸入神經元,七個隱層神經元,乙個輸出神經元。
環境:python3.6.5和tensorflow1.2.1,
import tensorflow as tf
from numpy.random import randomstate
import pandas as pd
import numpy as np
import time
# 定義神經網路的引數
d =3
# 輸入節點個數
l =1
# 輸出節點個數
q =2
* d +
1# 隱層個數,採用經驗公式2d+1
train_num =
480# 訓練資料個數
test_num =
240# 測試資料個數
eta =
0.5# 學習率
error =
0.002
# 精度
# 初始化權值和閾值
# tf.variable()變數初始化,tf.random_normal()採用正態分佈
# [d, q]為張量形狀,seed設定隨機種子,保證每次初始化相同資料
w1 = tf.variable(tf.random_normal(
[d, q]
, stddev=
1, seed=1)
)b1 = tf.variable(tf.constant(
0.0, shape=
[q])
)w2 = tf.variable(tf.random_normal(
[q, l]
, stddev=
1, seed=1)
)b2 = tf.variable(tf.constant(
0.0, shape=
[l])
)# 輸入佔位,(none,d)表示列為d,行不定
x = tf.placeholder(tf.float32, shape=
(none
, d)
)y_ = tf.placeholder(tf.float32, shape=
(none
, l)
)# 構建圖:前向傳播
a = tf.nn.sigmoid(tf.matmul(x, w1)
+ b1)
# sigmoid啟用函式
y = tf.nn.sigmoid(tf.matmul(a, w2)
+ b2)
mse = tf.reduce_mean(tf.square(y_ - y)
)# 損失函式採用均方誤差
train_step = tf.train.adamoptimizer(eta)
.minimize(mse)
# adam演算法,學習率為0.5,最小化均方誤差
# 讀取氣溫資料
# pd.read_csv()第乙個引數為路徑,第二個為分隔符
dataset = pd.read_csv(
'tem.csv'
, delimiter=
",")
dataset = np.array(dataset)
#得到n行1列的陣列
m, n = np.shape(dataset)
totalx = np.zeros(
(m - d, d)
)#返回來乙個給定形狀和型別的用0填充的陣列
totaly = np.zeros(
(m - d, l)
)for i in
range
(m - d)
:# range()從0到m-d,以1為步長,分組:前三個值輸入,第四個值輸出
totalx[i][0
]= dataset[i][0
] totalx[i][1
]= dataset[i +1]
[0] totalx[i][2
]= dataset[i +2]
[0] totaly[i][0
]= dataset[i +3]
[0]# 歸一化資料
normal_totalx = np.zeros(
(m - d, d)
)normal_totaly = np.zeros(
(m - d, l)
)nummin = np.
min(dataset)
nummax = np.
max(dataset)
dif = nummax - nummin
for i in
range
(m - d)
:for j in
range
(d):
normal_totalx[i]
[j]=
(totalx[i]
[j]- nummin)
/ dif
normal_totaly[i][0
]=(totaly[i][0
]- nummin)
/ dif
# 擷取訓練資料
# 訓練集擷取前train_num - d行,測試集擷取剩下的
x = normal_totalx[
:train_num - d,:]
y = normal_totaly[
:train_num - d,:]
testx = normal_totalx[train_num:,:
]testy = totaly[train_num:,:
]start = time.clock(
)# 建立會話(session)來執行圖
with tf.session(
)as sess:
init_op = tf.global_variables_initializer(
)# 初始化節點
sess.run(init_op)
#以初始節點執行網路
steps =
0while
true
: sess.run(train_step, feed_dict=
)#用x代替x,y代替y_執行train_step(adam演算法)
steps +=
1 train_mse = sess.run(mse, feed_dict=
)if steps %
10==0:
# 每訓練10次,輸出損失函式
print
("第 %d 次訓練後,訓練集損失函式為:%g"
%(steps, train_mse)
)if train_mse < error:
break
print
("總訓練次數:"
, steps)
end = time.clock(
)print
("執行耗時(s):"
, end - start)
# 測試
normal_y = sess.run(y, feed_dict=
)# 求得測試集下的y計算值
denormal_y = normal_y * dif + nummin # 將y反歸一化
test_mse = sess.run(mse, feed_dict=
)# 計算均方誤差
print
("測試集均方誤差為:"
, test_mse)
# **
xx = tf.constant([[
18.3
,17.4
,16.7]]
) xx =
(xx - nummin)
/ dif # 歸一化
a = tf.nn.sigmoid(tf.matmul(xx, w1)
+ b1)
y = tf.nn.sigmoid(tf.matmul(a, w2)
+ b2)
y = y * dif + nummin # 反歸一化
print
("[18.3,17.4,16.7]輸入下,**氣溫為:"
, sess.run(y)
)
Android機器學習之TensorFlow初體驗
wow,it s really amazing tensorflow 是乙個使用資料流圖進行數值計算的開源軟體庫。圖中的節點代表數 算,而圖中的邊則代表在這些節點之間傳遞的多維陣列 張量 這種靈活的架構可讓您使用乙個 api 將計算工作部署到桌面裝置 伺服器或者移動裝置中的乙個或多個 cpu 或 g...
機器學習筆記2
需要配合第一周的gradient decent intuition 食用 用直線去擬合函式,有兩個變數,斜率和位移,這就導致了方差函式 斜率,位移 的影象是個三維的曲面,當然方差越小擬合度越高,就是個好的猜測。如何得到這樣的擬合用的是梯度下降,高數中的知識 想象成你要下山 向下降最快的方向移動,移動...
機器學習學習筆記 day2
周志華 機器學習 學習筆記 最近開始學習機器學習,參考書籍西瓜書,做點筆記。第二章 模型評估與選擇 錯誤率 分類錯誤的樣本數佔樣本總數的比例,e a m。精度 分類正確的樣本數佔樣本總數的比例,精確度 1 錯誤率。過擬合 訓練樣本學的太好,導致泛化效能下降。欠擬合 訓練樣本學的不太好。測試集與訓練集...