機器學習 Keras 簡例

2022-06-28 01:57:09 字數 4351 閱讀 3436

安裝

pip install keras
keras 有兩個 backend,也就是 keras 基於什麼東西來做運算

keras 的兩個 backend,乙個是 theano,乙個是 tensorflow

每次當我們 import keras 的時候, 就會看到螢幕顯示當前使用的 backend

>>> import keras

using tensorflow backend.

配置檔案

lin@master:~$ cat ~/.keras/keras.json

直接修改配置檔案可能會在 import 時出現錯誤資訊

解決方案

1. 在其他文字編輯器內編輯好這段文字, 然後整體拷貝到這個檔案裡

2. 在 terminal 中直接輸入臨時環境變數執行: keras_backend=tensorflow python -c "from keras import backend"

3. 在 python **中 import keras 前加入乙個環境變數修改的語句: os.environ['keras_backend']='theano'

為什麼用 keras

tensorflow 提供很多基礎的操作, 要寫完乙個模型比如神經網路還需要很多**

keras 之類的第三方軟體對 tensorflow, theano 等作了封裝

適合於簡易和快速的原型設計

支援 cnn 和 rnn, 或二者的結合

無縫 cpu 和 gpu 切換

keras 適用的 python 版本是:python 2.7-3.6

keras 的設計原則是

使用者友好:提供一致而簡潔的 api

模組性:網路層、損失函式、優化器、初始化策略、啟用函式、正則化方法都是獨立的模組

易擴充套件性:新增新模組超級容易,只需要仿照現有的模組編寫新的類或函式即可

與 python 協作:keras 沒有單獨的模型配置檔案型別 (作為對比, caffe 有)

模型由 python **描述, 使其更緊湊和更易 debug, 並提供了擴充套件的便利性

神經網路例子

from sklearn import datasets

from keras.models import sequential

from keras.layers import dense, activation

from keras.utils import to_categorical

## 建立乙個空的順序序列的網路結構

model = sequential()

## 新增 dense (既全連線層)

## units 是該層的神經元個數既輸出資料維度

## activation 是啟用函式(沒指定就用 f(x)=x )

## use_bias 是否使用偏移

## input_dim 輸入資料維度

model.add(dense(units=64, activation='relu', input_dim=4))

model.add(dense(units=32, activation='relu'))

model.add(dense(units=3, activation='softmax'))

## 也可以分兩步實現, 把 activation 作為單獨一層

## model.add(dense(units=64, input_dim=100))

## model.add(activation("relu"))

## 編譯模型, 指定損失函式, 優化器, 也可以使用自己自定義的函式

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

## 讀取樣本資料

data = datasets.load_iris()

x, y = data.data[:-1], data.target[:-1]

## 轉為二進位制

y = to_categorical(y)

## 訓練

model.fit(x, y, epochs=100, batch_size=32)

## 評估

loss_and_metrics = model.evaluate(x, y, batch_size=128)

## **

classes = model.predict(x, batch_size=128)

卷積神經網路

from keras.layers import conv2d, maxpool2d, dense, flatten

from keras.models import sequential

from keras.utils import to_categorical

from sklearn import datasets

lenet = sequential()

## 新增卷積層, filters 核數, kernel_size 核大小, strides 步長, padding 填充方式, input_shape 輸入資料維度

lenet.add(conv2d(filters=6, kernel_size=3, strides=1, padding='same', input_shape=(8, 8, 1)))

## 新增池化層, pool_size 大小, strides 步長

lenet.add(maxpool2d(pool_size=2, strides=2))

## 繼續新增卷積層

lenet.add(conv2d(filters=16, kernel_size=3, strides=1, padding='valid'))

## 繼續新增池化層

lenet.add(maxpool2d(pool_size=2, strides=2))

## 扁平化, 將多維資料轉化為一維資料

lenet.add(flatten())

## 新增全連線層

lenet.add(dense(120))

lenet.add(dense(84))

lenet.add(dense(10, activation='softmax'))

## 編譯

lenet.compile('sgd', loss='mean_squared_error', metrics=['accuracy'])

## 讀取樣本資料

digits = datasets.load_digits()

x, y = digits.data[:-1], digits.target[:-1]

x = x.reshape(-1,8,8,1) ## 將 x 從 (1796, 64) 變為 (1796, 8, 8, 1)

y = to_categorical(y) ## 將 y 二進位製化 (one-hot)

## 訓練

lenet.fit(x, y, batch_size=64, epochs=50, validation_data=[x, y])

## **

lenet.predict(x)

視覺化

sudo apt-get install graphviz

sudo pip install graphviz

sudo pip install pydot_ng

from keras.models import sequential

from keras.layers.core import dense, dropout, activation

from keras.layers.embeddings import embedding

from keras.layers.recurrent import lstm

from keras.utils import plot_model

model = sequential()

model.add(embedding(input_dim=1024, output_dim=256, input_length=50))

model.add(lstm(128))

model.add(dropout(0.5))

model.add(dense(1))

model.add(activation('sigmoid'))

plot_model(model, to_file='model.png')

keras機器學習基礎

機器學習就是計算機用資料來學習。通過給計算機一些資料,讓計算機來學習,之後能夠進行自主計算和判斷。比如先給計算機一些阿貓阿狗的,並且告訴計算機每張是什麼 也就是標籤 計算機通過這些喂進去的資料來學習。學習完後,計算機就具備自主判斷能力,給計算機一張從未見過的阿貓或者阿狗的,計算機就能夠給打乙個標籤 ...

極簡機器學習入門

機器學習是人工智慧的子集。人工智慧是最早出現的,也是最大 最外側的矩形 其次是機器學習,稍晚一點 最內側,是深度學習,當今人工智慧大 的核心驅動。人工智慧可以分為強人工智慧和弱人工智慧。機器學習是一種實現人工智慧的方法。機器學習最基本的做法,是使用演算法來解析資料 從中學習,然後對真實世界中的事件做...

神經網路學習小記錄6 利用Keras進行簡單分類

全部 上一步講了如何構建回歸演算法,這一次將怎麼進行簡單分類。np utils.to categorical用於將標籤轉化為形如 nb samples,nb classes 的二值序列。假設num classes 10。如將 1,2,3,4 轉化成 0,1,0,0,0,0,0,0 0,0,1,0,0...