keras實現CNN

在深度學習的路上,從頭開始瞭解一下各項技術。本人是DL小白,連續記錄我自己看的一些東西,大家可以互相交流。

之前寫過一些關於深度學習的簡單概念,最近這段時間會看一些代碼相關的東西。

本文參考:吳恩達deeplearning.ai課程

一、前言

Keras是由純python編寫的基於theano/tensorflow的深度學習框架。是一個高層神經網絡API,支持快速實驗,能夠把你的idea迅速轉換爲結果。在寫tensorflow實現CNN的時候,無意中搜索到一篇keras實現CNN的文章,對比發現keras實現能節省很多步驟。

keras中,不需要根據各個層去設定不同的權重,初始值等參數,直接在函數中調用即可,並且在整個model中,只需要一步步更新X值,而不是每一處有一個新的儲存值。

話不多說,直接上代碼,具體的都在代碼裏了。

二、代碼實現

import numpy as np
from keras import layers
from keras.layers import Input, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D
from keras.layers import AveragePooling2D, MaxPooling2D, Dropout, GlobalAveragePooling2D, GlobalMaxPool2D
from keras.models import Model
from keras.preprocessing import image
from keras.utils import layer_utils
from keras.applications.imagenet_utils import preprocess_input
import pydot
from IPython.display import SVG
from keras.utils.vis_utils import model_to_dot
from keras.utils import plot_model
from kt_utils import *
import keras.backend as K
K.set_image_data_format('channels_last')
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow
#下載訓練集和數據集 classes表示圖片的分類
X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()

# 正則化圖片集,讓圖片集矩陣中的值在[0, 1]之間
X_train = X_train_orig/255.
X_test = X_test_orig/255.
# 結果是圖片的分類,不需要正則化,需要轉置後與X對齊
Y_train = Y_train_orig.T
Y_test = Y_test_orig.T
#查看數據集的形狀
print("number of training examples = " + str(X_train.shape[0]))
print("number of test examples = " + str(X_test.shape[0]))
print("X_train shape: " + str(X_train.shape))
print("Y_train shape: " + str(Y_train.shape))
print("X_test shape: " + str(X_test.shape))
print("Y_test shape: " + str(Y_test.shape))
#用keras建立CNN模型
def HappyModel(input_shape):
    X_input = Input(input_shape) #類似於TensorFlow的placeholder

    X = ZeroPadding2D((3, 3))(X_input) #用(3, 3)去pad X_input
    X = Conv2D(32, (8, 8), strides=(1, 1), name='conv0')(X)#通過7,7的卷積核
    X = BatchNormalization(axis=3, name='bn0')(X)
    X = Activation('relu')(X)

    X = MaxPooling2D((2, 2), name='max_pool')(X)#池化層

    X = Flatten()(X)#展開
    X = Dense(1, activation='sigmoid', name = 'fc')(X) #全連接

    model = Model(inputs = X_input, outputs = X, name = 'HappyHouse')

    return model

happyModel = HappyModel(X_train.shape[1:])

happyModel.compile(optimizer="Adam", loss = "binary_crossentropy", metrics=["accuracy"])

happyModel.fit(x = X_train, y = Y_train, epochs = 10, batch_size=32)

preds = happyModel.evaluate(X_test, Y_test)

print(str(preds))


 

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