Keras學(xué)習(xí)指北-線性回歸(tensorflow后端)

Keras介紹

Keras是基于TensorFlow和Theano(由加拿大蒙特利爾大學(xué)開發(fā)的機(jī)器學(xué)習(xí)框架)的深度學(xué)習(xí)庫,是由純python編寫而成的高層神經(jīng)網(wǎng)絡(luò)API,也僅支持python開發(fā)。它是為了支持快速實(shí)踐而對tensorflow或者Theano的再次封裝,讓我們可以不用關(guān)注過多的底層細(xì)節(jié),用它可以快速地搭建網(wǎng)絡(luò),能夠把想法快速轉(zhuǎn)換為結(jié)果。Keras默認(rèn)的后端為tensorflow,如果想要使用theano可以自行更改。tensorflow和theano都可以使用GPU進(jìn)行硬件加速,往往可以比CPU運(yùn)算快很多倍。

20181108111411103.png

開發(fā)步驟

還是四大塊,但是keras比tensorflow好處是中間好多模型和參數(shù)不要自己在寫了
1 數(shù)據(jù)集整理
2 定義模型
3 訓(xùn)練/學(xué)習(xí)
4 預(yù)測/評估

對比tensorflow和keras

以前的線性回歸模型(tensorflow實(shí)現(xiàn))
每次一篇10分鐘,小步快跑攻陷Tensorflow(簡單線性回歸模型)

現(xiàn)在用keras寫一個

構(gòu)建數(shù)據(jù)集,這可以用np.linspace(0, 1, 100)的方式,我這里用比較通俗的寫法,比較容易看明白。

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

print('Data -----------')
#構(gòu)建訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù) (100個點(diǎn))
number=100
list_x = []
list_y = []

for i in range(number):
    x = np.random.randn()
    #這里構(gòu)建的數(shù)據(jù)的分布滿足y=2*x+3 增加了一些噪點(diǎn)
    y = 2*x+3+np.random.randn()*1
    list_x.append(x)
    list_y.append(y)
print(list_x)
print(list_y)

plt.scatter(list_x, list_y)
plt.show()

定義模型

print('Model -----------')
 # 把前80個數(shù)據(jù)放到訓(xùn)練集
X_train, Y_train = list_x[:80], list_y[:80] 
# 把后20個點(diǎn)放到測試集   
X_test, Y_test = list_x[80:], list_y[80:]       

# 定義一個模型
# Keras 單輸入單輸出的順序序列模型 Sequential,
model = Sequential () 
#設(shè)置模型
#通過add()方法一層層添加模型,Dense是全連接層,第一層需要定義輸入,
model.add(Dense(output_dim=1, input_dim=1)) 

訓(xùn)練/學(xué)習(xí)

# 選擇損失函數(shù)和優(yōu)化器
model.compile(loss='mse', optimizer='sgd')

# 開始訓(xùn)練
print('Training -----------')
#訓(xùn)練200次
for step in range(200):
    cost = model.train_on_batch(X_train, Y_train) 
    # 每20次迭代輸出
    if step % 20 == 0:
        print('train cost: ', cost)

# 查看訓(xùn)練出的網(wǎng)絡(luò)參數(shù):權(quán)重和偏移
W, b = model.layers[0].get_weights()   
print('Weights=', W, '\nbiases=', b)

預(yù)測/評估

# 測試訓(xùn)練好的模型
print('Testing ------------')
cost = model.evaluate(X_test, Y_test, batch_size=40)
print('test cost:', cost)
# plotting the prediction
Y_pred = model.predict(X_test)
#畫圖(藍(lán)點(diǎn),紅線)
plt.scatter(X_test, Y_test, c='b', marker='o', label='real data')
plt.plot(X_test, Y_pred, c='r', label='predicted data')
plt.show()

比以前代碼量小了,也不用關(guān)心模型細(xì)節(jié)了。

全部代碼

到github查看https://github.com/horacepei/tensorflow_study

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容