機器學習筆記(2)tensorflow學習

2021-10-23 16:18:06 字數 4294 閱讀 3785

參考資料:

單隱層前饋網路結構:

問題描述:**天氣氣溫,當輸入連續三小時的氣溫時,**第四個小時的氣溫。

資料:訓練集為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 錯誤率。過擬合 訓練樣本學的太好,導致泛化效能下降。欠擬合 訓練樣本學的不太好。測試集與訓練集...