1、什麼是Keraspython
Keras 是一個用 Python 編寫的高級神經網絡 API,它可以以 TensorFlow, CNTK, 或者 Theano 做爲後端運行。git
具體能夠參考:Keras: 基於 Python 的深度學習庫github
經過以前的例子 Tensorflow——利用神經網絡實現線性迴歸的預測 咱們發現tensorflow的入門門檻仍是比較高的後端
並且我的感受其對於神經網絡中各個層的定義不是很明確,是經過定義層到層之間的參數來肯定的api
而Keras就很明確的定義了層的概念,反過來層與層之間的參數反卻是用戶不須要關心的對象網絡
因此構建神經網絡的方法對於普通開發者來講,相對tensorflow,Keras更易上手dom
而Keras也是tensorflow官方在tensorflow2.0開始牆裂推薦使用的函數
2、將以前的例子改爲Keras實現學習
刪除tf.placeholder佔位、tf.Variable變量、模型、損失函數、優化器的定義(其實就是將因此的都刪除了^_^)優化
使用tf.keras構建模型
這裏直接使用tf.keras.Sequential來構建一個最簡單的線性模型
model = tf.keras.Sequential()
向模型中添加層兩個全鏈接層做爲隱藏層
model.add(tf.keras.layers.Dense(10)) model.add(tf.keras.layers.Dense(10))
再添加一個全鏈接層做爲輸出層
model.add(tf.keras.layers.Dense(1))
配置模型的損失函數和優化器,依然使用AdamOptimizer優化器'adam',損失函數依然是方差'mse'
(注意:在tensorflow1.13中能夠寫成optimizer=tf.train.AdamOptimizer(0.001),可是tensorflow2.0中必須寫成optimizer='adam')
model.compile(optimizer='adam', loss='mse')
經過model.fit開始訓練,依然訓練5000次
這裏須要將x和y轉化爲二維的numpy矩陣(model.fit的輸入支持的參數能夠查看官網API:tf.keras.model.fit)
for _ in range(5000): x_train, y_train = create_data(True) x_train = np.array(x_train, ndmin=2) y_train = np.array(y_train, ndmin=2) model.fit(x_train, y_train)
使用訓練好的模型進行預測(依然須要將x轉化爲二維的numpy矩陣)
for _ in range(10): x_data, y_data = create_data(False) x_data = np.array(x_data, ndmin=2) prediction_value = model.predict(x_data) print("x=", x_data, "y預測=", prediction_value, "y實際=", y_data)
預測結果爲:
x= [[16.8307033]] y預測= [[65.21274]] y實際= 66.44764860292732 x= [[12.11375358]] y預測= [[40.489502]] y實際= 41.30630660712863 x= [[26.50665706]] y預測= [[115.927895]] y實際= 118.02048213508458 x= [[23.92639848]] y預測= [[102.40385]] y實際= 104.26770387755393 x= [[28.40950307]] y預測= [[125.90141]] y實際= 128.16265135441537 x= [[4.02130059]] y預測= [[-1.9259634]] y實際= -1.8264678301731045 x= [[24.24050166]] y預測= [[104.05016]] y實際= 105.94187387358106 x= [[29.71602577]] y預測= [[132.74937]] y實際= 135.126417345193 x= [[22.21779693]] y預測= [[93.44843]] y實際= 95.16085765597148 x= [[25.86439061]] y預測= [[112.56156]] y實際= 114.59720195233699
====================================================
完整代碼以下,在python3.6.八、tensorflow1.13/tensorflow2.0.0-alpha0 環境下成功運行
https://github.com/yukiti2007/sample/blob/master/python/tensorflow/wx_b_nn_keras.py
import random import numpy as np import tensorflow as tf def create_data(for_train=False): w = 5.33 b = -23.26 x = random.random() * 30 y = w * x + b if for_train: noise = (random.random() - 0.5) * 10 y += noise return x, y def run(): model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(10)) model.add(tf.keras.layers.Dense(10)) model.add(tf.keras.layers.Dense(1)) model.compile(optimizer='adam', loss='mse') for _ in range(5000): x_train, y_train = create_data(True) x_train = np.array(x_train, ndmin=2) y_train = np.array(y_train, ndmin=2) model.fit(x_train, y_train) for _ in range(10): x_data, y_data = create_data(False) x_data = np.array(x_data, ndmin=2) prediction_value = model.predict(x_data) print("x=", x_data, "y預測=", prediction_value, "y實際=", y_data) if __name__ == "__main__": run()