【Tensorflow2.0】利用神經網絡實現線性迴歸的預測(Keras方式實現)

1、什麼是Keraspython

Keras 是一個用 Python 編寫的高級神經網絡 API,它可以以 TensorFlowCNTK, 或者 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()
相關文章
相關標籤/搜索