1. 程式人生 > >吳恩達深度學習4-Week2課後作業1-Keras-Happy House

吳恩達深度學習4-Week2課後作業1-Keras-Happy House

一、Deeplearning-assignment

在本週的任務中,將開始學習使用Keras:

  1. 學習使用Keras,這是一個用Python編寫的高階神經網路API(程式設計框架),能夠在包括TensorFlow和CNTK在內的幾個底層框架上執行。
  2. 看看如何在幾個小時內建立一個深度學習演算法。

為什麼我們使用Keras?Keras的開發是為了讓深度學習的工程師能夠非常快速地建立和嘗試不同的模型。就像TensorFlow是一個比Python更高級別的框架一樣,Keras是一個更高層次的框架,並提供額外的抽象。能夠以最少的時間根據ideal獲取結果是尋找好模型的關鍵。可是,Keras相對底層框架擁有更多的限制,所以有些能在TensorFlow中實現的非常複雜的模型在Keras中卻不能實現。也就是說,Keras 只對常見的模型支援良好。

現在有這樣一個實際問題:有一個房子,任何想要進入房子的人都必須證明自己當前是開心快樂的。

作為一名深度學習專家,為了確保 "Happy" rule 得到嚴格實施, 您將打算使用前門攝像頭拍攝的圖片來檢查該人是否快樂。只有當人感到快樂時,門才會開啟。

你收集了你的朋友和你自己的照片,由前門攝像頭拍攝。資料集是帶有標籤的。

“Happy”資料集的詳細資訊::

  • Images are of shape (64,64,3)
  • Training: 600 pictures
  • Test: 150 pictures

Keras 非常適合快速製作原型。在很短的時間內,你就能夠構建一個模型,並獲得出色的成果。


二、相關演算法程式碼

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, GlobalMaxPooling2D, GlobalAveragePooling2D
from keras.models import Model
from keras.preprocessing import image
from keras.utils import layer_utils
from keras.utils.data_utils import get_file
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
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

K.set_image_data_format('channels_last')
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow

X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()
X_train = X_train_orig / 255
X_test = X_test_orig / 255
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))


#  Here is an example of a model in Keras:
def model(intput_shape):
    X_input = Input(intput_shape)
    #  zero-padding
    X = ZeroPadding2D((3, 3))(X_input)
    #  conv->bn->relu
    X = Conv2D(32, (7, 7), strides=(1, 1), name='conv0')(X)
    X = BatchNormalization(axis=3, name='bn0')(X)
    X = Activation('relu')(X)
    #  maxpool
    X = MaxPooling2D((2, 2), name='max_pool')(X)
    #  flatten x + fullyconnected
    X = Flatten()(X)
    X = Dense(1, activation='sigmoid', name='fc')(X)

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

    return model


def HappyModel(input_shape):
    X_input = Input(input_shape)

    X = ZeroPadding2D((3, 3))(X_input)

    X = Conv2D(32, (7, 7), strides=(1, 1), name='conv0')(X)
    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='HappyModel')

    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=39, batch_size=16)
preds = happyModel.evaluate(x = X_test, y = Y_test)
print ("Loss = " + str(preds[0]))
print ("Test Accuracy = " + str(preds[1]))

三、總結

從這次作業中我們需要記住以下幾點:

  1. Keras是一種快速建立模型的工具,它允許在較短的時間內快速嘗試不同的模型架構。
  2. 要記住我們是怎樣通過建立的模型訓練資料集達到想要的效果:Create->Compile->Fit/Train->Evaluate/Test。