本篇將會繼續介紹 CNN 的技術層面問題,上一篇講到 CNN 的基礎做法以及形成的模樣,並且透過數學式,將各項輸入資料經過訓練會為更加穩定。
那麼今日我們會以一些範例來看看 CNN 在實作上都是怎麼呈現的。
import numpy as np
import pandas as pd
import cv2
import matplotlib.pyplot as plt
import tensorflow as tf
import os
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Dropout, Activation, Conv2D, MaxPooling2D
train_dir = "train"
path = os.path.join(train_dir)
X = []
y = []
convert = lambda category : int(category == 'dog')
def create_test_data(path):
for p in os.listdir(path):
category = p.split(".")[0]
category = convert(category)
img_array = cv2.imread(os.path.join(path,p),cv2.IMREAD_GRAYSCALE)
new_img_array = cv2.resize(img_array, dsize=(80, 80))
X.append(new_img_array)
y.append(category)
create_test_data(path)
X = np.array(X).reshape(-1, 80,80,1)
y = np.array(y)
#Normalize data
X = X/255.0
model = Sequential()
# Adds a densely-connected layer with 64 units to the model:
model.add(Conv2D(64,(3,3), activation = 'relu', input_shape = X.shape[1:]))
model.add(MaxPooling2D(pool_size = (2,2)))
# Add another:
model.add(Conv2D(64,(3,3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2,2)))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
# Add a softmax layer with 10 output units:
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer="adam",
loss='binary_crossentropy',
metrics=['accuracy'])
本篇的程式,從參考資料中抓取過來,主要是將輸入的 data 資料進行資料分類之後再進行 CNN 建模動作,在第二大段的程式中,需要做到分類動作是蠻重要的,因為你一個重要的分類完畢之後,才能讓 model 建立起來,如果分類不完全給予建模的話,出現的資料都會有問題,連訓練出來的資料都會不完整,所以在訓練資料中,我們都會先將資料分類完畢。
那麼可能會有需要初學者會不知道,CNN到底所使用到的模組是哪些,基本上就是以 tensorflow 為基礎,from tensorflow.keras.models import Sequential,
from tensorflow.keras.layers import Dense, Flatten, Dropout, Activation, Conv2D, MaxPooling2D,這兩條程式碼就是建立 CNN 模組重要的依據,以這個模組為基礎讓 CNN 建立起來。
那麼先謝謝大家觀看,如果各位有問題可以再做詢問,或詳情看 CNN 參考資料也可以。
CNN實例參考資料
適當的使用訊息搜尋,可以達到不少資訊。