神經網絡學習

神經網絡學習001

import numpy as np #NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用, 這種組合廣泛用於替代 MatLab

np.random.seed(1337)
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
#Matplotlib 是 Python 編程語言及其數值數學擴展包 NumPy 的可視化操作界面。它爲利用通用的圖形用戶界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 嚮應用程序嵌入式繪圖提供了應用程序接口(API)。

# 創建數據集
X = np.linspace(-1, 1, 200) #在指定的間隔內返回均勻間隔的數字
np.random.shuffle(X)  # 將數據集隨機化,打亂順序
Y = 0.5 * X + 2 + np.random.normal(0, 0.05, (200,))
#概率分佈的均值,標準差 # 假設我們真實模型爲:Y=0.5X+2
plt.scatter(X, Y)# 繪製數據集
plt.show()

X_train, Y_train = X[:160], Y[:160]  # 把前160個數據放到訓練集
X_test, Y_test = X[160:], Y[160:]  # 把後40個點放到測試集

# 定義一個model,
model = Sequential()  # Keras有兩種類型的模型,序貫模型(Sequential)和函數式模型
# 比較常用的是Sequential,它是單輸入單輸出的
model.add(Dense(output_dim=1, input_dim=1))  # 通過add()方法一層層添加模型
# Dense層就是所謂的全連接神經網絡層
# output_dim: int >= 0,輸出結果的維度
# 第二層無需指定輸入,一般第二層把第一層的輸出作爲輸入
# 定義完模型就需要訓練了,不過訓練之前我們需要指定一些訓練參數
# 通過compile()方法選擇損失函數和優化器
# 這裏我們用均方誤差作爲損失函數,隨機梯度下降作爲優化方法
model.compile(loss='mse', optimizer='sgd')
#經典損失函數——均方誤差(MSE)https://blog.csdn.net/lewis1993_cpapa/article/details/79598664
# 開始訓練
print('Training -----------')
for step in range(301):
    cost = model.train_on_batch(X_train, Y_train)  # Keras有很多開始訓練的函數,這裏用train_on_batch()
    if step % 100 == 0:
        print('train cost: ', cost)
#train_on_batch本函數在一個batch的數據上進行一次參數更新函數返回訓練誤差的標量值或標量值的list,與evaluate的情形相同。
# 測試訓練好的模型
print('\nTesting ------------')
cost = model.evaluate(X_test, Y_test, batch_size=40)
print('test cost:', cost)
W, b = model.layers[0].get_weights()  # 查看訓練出的網絡參數
# 由於我們網絡只有一層,且每次訓練的輸入只有一個,輸出只有一個
# 因此第一層訓練出Y=WX+B這個模型,其中W,b爲訓練出的參數
print('Weights=', W, '\nbiases=', b)

# plotting the prediction
Y_pred = model.predict(X_test)
plt.scatter(X_test, Y_test)
plt.plot(X_test, Y_pred)
plt.show()

結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章