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é)了。