溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Keras庫如何安裝使用

發(fā)布時間:2022-03-01 10:32:18 來源:億速云 閱讀:277 作者:iii 欄目:開發(fā)技術

本篇內(nèi)容介紹了“Keras庫如何安裝使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

安裝

使用Anaconda的conda install就可以安裝Keras庫:

conda install keras

該命令也會立即幫你安裝好相關依賴。

后端配置

Keras 可以使用多個可用庫之一作為其后端,這是處理低級操作(例如張量)的部分。我們將使用 TensorFlow,這是默認設置。

首先,我們將稍微調(diào)整 TensorFlow 的配置。具體來說,我們將allow_growth選項設置為 true,這允許 TensorFlow 動態(tài)增加使用的 GPU 內(nèi)存,而不是預先分配所有內(nèi)容。如果我們不這樣做,TensorFlow 可能會嘗試分配太多內(nèi)存,導致你的 GPU 會立即耗盡內(nèi)存(對我來說確實如此)。為此,請把以下代碼放在文件的開頭:

如果您的后端是 TensorFlow 1.x:

from keras.backend.tensorflow_backend import set_session
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
set_session(tf.Session(config=config))

對于 TensorFlow 2.x,你必須set_memory_growth設置為你的 GPU調(diào)用該函數(shù)。你可以在tf.config.experimental.set_memory_growth文檔中閱讀更多關于這背后的細節(jié)。

怎么查看你所擁有的版本?可以通過conda list來查看您的 TensorFlow 版本。即便使用相同的 Anaconda 安裝命令,例如我在一臺計算機上安裝了 1.13.1,在另一臺上安裝了 2.1.0。

如果你想強制 Keras 使用你的 CPU 而不是你的 GPU,請在第一次 Keras import 之前添加:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

雖然這樣一來比在 GPU 上慢很多,但如果你沒有足夠的多 GPU 內(nèi)存,你還真得考慮一下這樣做。

使用 Keras 進行圖像分類

我們將使用英特爾圖像分類數(shù)據(jù)集演示用于圖像分類的 Keras 。該數(shù)據(jù)集包含六個類別的圖像,分為六個不同的目錄,這非常方便,因為 Keras 提供了處理該格式數(shù)據(jù)的內(nèi)置功能。

雖然你不用過多擔心神經(jīng)網(wǎng)絡背后的數(shù)學問題,但你還需要對此有足夠的理解,因為你才能準確指定你的模型由哪些層組成。

Keras 提供的模型之一是順序模型,即一堆層。創(chuàng)建順序模型和添加層非常簡單:

from keras.models import Sequential

model = Sequential()
model.add(layer_one)
model.add(layer_two)
# ...

以下是我們的模型用于圖像分類的樣子:

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Dropout, Flatten, Dense
from keras.layers.normalization import BatchNormalization

model = Sequential()

model.add(Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(150, 150, 3))) # our images are 150*150
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(BatchNormalization())

model.add(Conv2D(64, kernel_size=(3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(BatchNormalization())

model.add(Conv2D(128, kernel_size=(3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(BatchNormalization())

model.add(Flatten())
model.add(Dense(128, activation="relu"))
model.add(Dropout(0.15))
model.add(Dense(64, activation="relu"))
model.add(Dense(6, activation="softmax"))

神經(jīng)網(wǎng)絡模型的構建超出了本模塊的范圍,但簡而言之:卷積層的重復模式(由于模式變得更復雜,過濾器數(shù)量越來越多)、最大池化層和批處理歸一化通常用作圖像分類問題的第一步。該步驟的輸出是多維的,我們將其展平為具有展平層的一維向量。我們以幾個密集連接的層結(jié)束,中間有一個 dropout 層,以幫助對抗過度擬合。最后一層必須輸出一個包含六個元素的向量,因為我們有六個類別。

接下來,我們編譯模型,這意味著我們對其進行配置以進行訓練:

model.compile(loss='sparse_categorical_crossentropy',
          	   optimizer='adam',
          	   metrics=['accuracy'])

我們的損失函數(shù)sparse_categorical_crossentropy非常適合分類問題,而類別之間沒有重疊。有關損失函數(shù)的完整討論,請參閱Keras 文檔。我們正在使用 Adam 優(yōu)化器??梢栽谙嚓P文檔中找到優(yōu)化器的完整列表。并metrics指定模型在訓練和測試期間評估的內(nèi)容。

擬合模型

現(xiàn)在我們有了模型的結(jié)構,我們可以將它擬合到我們的數(shù)據(jù)集。

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(validation_split=0.2)
train_generator = 
    datagen.flow_from_directory("intel-images/seg_train/seg_train", 
    batch_size=32, target_size=(150,150), class_mode="sparse", 
    subset="training")
validation_generator = 
    datagen.flow_from_directory("intel-images/seg_train/seg_train", 
    batch_size=32, target_size=(150, 150), class_mode="sparse", 
    subset="validation")
model.fit_generator(train_generator, epochs=40, 
                    validation_data=validation_generator)

(如果你想要以較低的準確度更快地完成該過程,請自定義減少 epoch 的數(shù)量,尤其是在你使用 CPU 的情況下。40 個 epoch 需要相當長的時間。)

根據(jù) Keras 文檔,這就是 an 的ImageDataGenerator作用:

使用實時數(shù)據(jù)增強生成批量張量圖像數(shù)據(jù)。數(shù)據(jù)將被循環(huán)(分批)。

我們的例子沒有做任何數(shù)據(jù)增強。稍后我們將介紹該功能。

在前面的代碼中,validation_split=0.2意味著我們將使用 20% 的訓練集進行驗證。由于數(shù)據(jù)集只有一個訓練集和一個測試集,我們必須使用訓練集的一個子集作為驗證集。

flow_from_directory 是一個簡潔的內(nèi)置函數(shù),非常適合像我們這樣的數(shù)據(jù)集結(jié)構:每個類別的子目錄。

class_mode="sparse" 意味著我們正在處理一維整數(shù)標簽。

fit_generatorImageDataGenerator在我們指定的多個時期中將模型擬合到。

測試模型

訓練完成后,我們可以用evaluate_generator函數(shù)測試模型。就像fit_generator,它需要一個生成器作為參數(shù)。我們可以為我們的測試數(shù)據(jù)創(chuàng)建一個,類似于我們?yōu)橛柧殧?shù)據(jù)所做的:

test_datagen = ImageDataGenerator()
test_generator = 
    datagen.flow_from_directory(
        "intel-images/seg_test/seg_test", 
        target_size=(150,150), class_mode="sparse")
print(model.evaluate_generator(test_generator))

這將為我們的示例返回一個包含兩個值的數(shù)組:損失和準確性。(你還可以通過查看model.metrics_names值來檢查。)

我的準確率為 81.7%,這對于非平凡數(shù)據(jù)集上的相對簡單模型來說還不錯。

生成預測

你現(xiàn)在可以使用該model.predict方法對任何圖像生成預測。此方法將 NumPy 圖像數(shù)組作為輸入,其中圖像也是形狀為 (150, 150, 3) 的 NumPy 數(shù)組。要對一張圖像進行預測,你可以執(zhí)行以下操作:

import skimage.io
import numpy as np

model.predict(np.expand_dims(skimage.io.imread("file.jpg"), axis=0))

skimage.io.imread將讀取圖像expand_dims并將另一個維度添加到數(shù)組。輸出是一個預測數(shù)組,其中每個預測是一個值數(shù)組,指示每個類別的概率。

數(shù)據(jù)增強

數(shù)據(jù)增強是指根據(jù)現(xiàn)有訓練集生成新的訓練數(shù)據(jù),以提高準確性和泛化性并減少過度擬合。

對于圖像,數(shù)據(jù)增強可以通過對圖像進行多種變換來完成:旋轉(zhuǎn)、翻轉(zhuǎn)、縮放、移位、剪切等。

ImageDataGenerator使這變得容易。要將數(shù)據(jù)增強應用于我們的模型,只需更改兩行代碼。

首先,ImageDataGenerator使用更多參數(shù)實例化,指定我們想要的轉(zhuǎn)換:

Python復制代碼

datagen = ImageDataGenerator(rotation_range=30, 
                             horizontal_flip=True, 
                             zoom_range=0.2, 
                             shear_range=0.2)

還有更多的可能性——請參閱圖像預處理文檔以獲取完整的參數(shù)列表。

第二行是fit_generator電話。這個函數(shù)有可選steps_per_epoch和validation_steps參數(shù),我們可以離開了前面,因為我們有訓練樣本的固定數(shù)量。通過數(shù)據(jù)增強,我們可能有更多的訓練樣本,因此我們必須指定要使用的數(shù)量。如果我們不這樣做,該函數(shù)將只使用我們固定大小的樣本集。一個步驟對應于一批給定的batch_size。

model.fit_generator(train_generator, epochs=40, 
                    validation_data=validation_generator, 
                    steps_per_epoch=1600, validation_steps=32)

同樣,如果您希望該過程更快,請隨時減少 epoch 數(shù)或步驟數(shù)。經(jīng)過 2-3 小時的訓練,我的準確率為 85.5%。

保存和恢復模型

Keras 允許你以 HDF5 格式保存經(jīng)過訓練的模型:

model.save("images_model.h6")

恢復模型也是一行:

import keras.models
model = keras.models.load_model("images_model.h6")

這需要h6py軟件包,如果你使用的是conda install. 如果沒有,請在 Jupyter Notebook 單元中運行此 pip 命令:

Python復制代碼

!pip install --upgrade h6py

“Keras庫如何安裝使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI