精品一区二区三区影院在线午夜_天天躁日日躁狠狠躁AV麻豆_国产午夜福利短视频_中文字幕乱偷无码AV先锋蜜桃_久久精品一二区东京热_国产成人亚洲日韩欧美久久久,国产成人精品久久一区二区三区

keras入門簡介

一、keras介紹

  Keras (κ?ρα?) 在希臘語中意為 號角 。它來自古希臘和拉丁文學中的一個文學形象,首先出現于 《奧德賽》 中, 夢神 (Oneiroi, singular Oneiros) 從這兩類人中分離出來:那些用虛幻的景象欺騙人類,通過象牙之門抵達地球之人,以及那些宣告未來即將到來,通過號角之門抵達之人。

  Keras是一個高層神經網絡API,Keras由純Python編寫而成并基TensorflowTheano以及CNTK后端。Keras 為支持快速實驗而生,能夠把你的idea迅速轉換為結果,如果你有如下需求,請選擇Keras:

  • 簡易和快速的原型設計(keras具有高度模塊化,極簡,和可擴充特性)
  • 支持CNN和RNN,或二者的結合
  • 無縫CPU和GPU切換

Keras的設計原則是

  • 用戶友好:Keras是為人類而不是天頂星人設計的API。用戶的使用體驗始終是我們考慮的首要和中心內容。Keras遵循減少認知困難的最佳實踐:Keras提供一致而簡潔的API, 能夠極大減少一般應用下用戶的工作量,同時,Keras提供清晰和具有實踐意義的bug反饋。
  • 模塊性:模型可理解為一個層的序列或數據的運算圖,完全可配置的模塊可以用最少的代價自由組合在一起。具體而言,網絡層、損失函數、優化器、初始化策略、激活函數、正則化方法都是獨立的模塊,你可以使用它們來構建自己的模型。
  • 易擴展性:添加新模塊超級容易,只需要仿照現有的模塊編寫新的類或函數即可。創建新模塊的便利性使得Keras更適合于先進的研究工作。
  • 與Python協作:Keras沒有單獨的模型配置文件類型(作為對比,caffe有),模型由python代碼描述,使其更緊湊和更易debug,并提供了擴展的便利性。

二、序貫模型

Keras中主要的模型是Sequential模型,Sequential是一系列網絡層按順序構成的棧,也就是“一條路走到黑”。

from keras.models import Sequential
from keras.layers import Dense, Activation
#定義模型
model = Sequential()

#添加第一層神經網絡,第一層需要明確輸入的維度,這里是100,64表示輸入層后面的隱藏層節點數
model.add(Dense(units=64, input_dim=100))
model.add(Activation("relu"))
#添加第二層神經網絡,第二層就不需要明確輸入層,上面的64個節點的隱藏層就是該輸入層,該層的節點數是10
model.add(Dense(units=10))
model.add(Activation("softmax"))

#深度模型框架搭建好后,需要編譯模型;編譯模型時必須指明損失函數和優化器
model.compile(loss=\'categorical_crossentropy\', optimizer=\'sgd\', metrics=[\'accuracy\'])
#也可以自己定制損失函數
from keras.optimizers import SGD
model.compile(loss=\'categorical_crossentropy\', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))

#完成模型編譯后,我們在訓練數據上按batch進行一定次數的迭代來訓練網絡
model.fit(x_train, y_train, epochs=5, batch_size=32)
#當然,我們也可以手動將一個個batch的數據送入網絡中訓練,這時候需要使用:
model.train_on_batch(x_batch, y_batch)

#模型評估
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

#模型預測
classes = model.predict(x_test, batch_size=128)

序貫模型細節參考:https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/

三、函數式(Functional)模型

函數式模型的輸入是張量,輸出也是張量。

from keras.layers import Input, Dense
from keras.models import Model

# 輸入層
inputs = Input(shape=(784,))

#Dense的輸入是張量,輸出也是張量
x = Dense(64, activation=\'relu\')(inputs) #第一個隱藏層
x = Dense(64, activation=\'relu\')(x) #第二個隱藏層
predictions = Dense(10, activation=\'softmax\')(x) #輸出層

model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer=\'rmsprop\',
              loss=\'categorical_crossentropy\',
              metrics=[\'accuracy\'])
model.fit(data, labels)  # 開始訓練

利用函數式模型的接口,我們可以很容易的重用已經訓練好的模型:你可以把模型當作一個層一樣,通過提供一個tensor來調用它。注意當你調用一個模型時,你不僅僅重用了它的結構,也重用了它的權重。

x = Input(shape=(784,))
# This works, and returns the 10-way softmax we defined above.
y = model(x)

四、例子

1)回歸模型

# Regressor example
# Code: https://github.com/keloli/KerasPractise/edit/master/Regressor.py

import numpy as np
np.random.seed(1337)  
from keras.models import Sequential 
from keras.layers import Dense
import matplotlib.pyplot as plt

# 創建數據集
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是全連接層,第一層需要定義輸入,
                                            # 第二層無需指定輸入,一般第二層把第一層的輸出作為輸入

# 定義完模型就需要訓練了,不過訓練之前我們需要指定一些訓練參數
# 通過compile()方法選擇損失函數和優化器
# 這里我們用均方誤差作為損失函數,隨機梯度下降作為優化方法
model.compile(loss=\'mse\', optimizer=\'sgd\')

# 開始訓練
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)

# 測試訓練好的模型
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()

2) 手寫數字識別

# _*_ coding: utf-8 _*_
# Classifier mnist

import numpy as np
np.random.seed(1337)  
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import RMSprop

# 下載數據集
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# 數據預處處理
X_train = X_train.reshape(X_train.shape[0], -1) / 255. 
X_test = X_test.reshape(X_test.shape[0], -1) / 255.  
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)

# 不使用model.add(),用以下方式也可以構建網絡
model = Sequential([
    Dense(400, input_dim=784),
    Activation(\'relu\'),
    Dense(10),
    Activation(\'softmax\'),
])

# 定義優化器
rmsprop = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(optimizer=rmsprop,
              loss=\'categorical_crossentropy\',
              metrics=[\'accuracy\']) # metrics賦值為\'accuracy\',會在訓練過程中輸出正確率

# 這次我們用fit()來訓練網路
print(\'Training ------------\')
model.fit(X_train, y_train, epochs=4, batch_size=32)

print(\'\nTesting ------------\')
# 評價訓練出的網絡
loss, accuracy = model.evaluate(X_test, y_test)

print(\'test loss: \', loss)
print(\'test accuracy: \', accuracy)

參考鏈接:

  https://www.jianshu.com/p/e9c1e68a615e

https://keras-cn.readthedocs.io/en/latest/#keraspython

  https://keras.io/zh/losses/

金湖县| 家居| 内江市| 麟游县| 金寨县| 尤溪县| 长泰县| 南乐县| 琼中| 五峰| 永兴县| 勃利县| 玛纳斯县| 尉氏县| 宝应县| 库伦旗| 河南省| 德钦县| 轮台县| 阿克陶县| 客服| 临高县| 昔阳县| 前郭尔| 汝阳县| 福建省| 长泰县| 永胜县| 绥棱县| 抚州市| 开江县| 崇义县| 永德县| 临城县| 朝阳市| 铁岭县| 鹰潭市| 光泽县| 获嘉县| 桐梓县| 容城县|