즐거운프로그래밍

[딥러닝] 알렉스넷 바탕으로 신경망 구성하기, 배치 정규화, 드롭아웃 적용하기

수수께끼 고양이 2023. 11. 2. 13:59
728x90
반응형

 

알렉스넷 아키텍처 신경망 구성하기

 

import tensorflow as tf
import numpy as np

X=np.random.randint(0,256,(5000,227,227,3))
YT=np.random.randint(0,1000,(5000,))
x=np.random.randint(0,256,(1000,227,227,3))
yt=np.random.randint(0,1000,(1000,))

model = tf.keras.Sequential([
    tf.keras.layers.InputLayer(input_shape=(227,227,3)),
    tf.keras.layers.Conv2D(96,(11,11),(4,4),activation='relu'),
    tf.keras.layers.MaxPooling2D((3,3),(2,2)),
    tf.keras.layers.Conv2D(256,(5,5),(1,1),activation='relu',padding='same'),
    tf.keras.layers.MaxPooling2D((3,3),(2,2)),
    tf.keras.layers.Conv2D(384,(3,3),(1,1),activation='relu',padding='same'),
    tf.keras.layers.Conv2D(384,(3,3),(1,1),activation='relu',padding='same'),
    tf.keras.layers.Conv2D(256,(3,3),(1,1),activation='relu',padding='same'),
    tf.keras.layers.MaxPooling2D((3,3),(2,2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(4096,activation='relu'),
    tf.keras.layers.Dense(4096,activation='relu'),
    tf.keras.layers.Dense(1000,activation='softmax')
])    
# model.summary()
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(X,YT,epochs=5)

model.evaluate(x,yt)

 

 

 

 


신경망 구성 후 배치 정규화, 드롭아웃 적용하기

 

BatchNormalization(배치 정규화)은 활성화 함수(Activation Function) 전에 사용함
ex.   tf.keras.layers.BatchNormalization(),
        tf.keras.layers.ReLU(),

 

import tensorflow as tf

mnist=tf.keras.datasets.cifar10
(X,YT),(x,yt)=mnist.load_data()
X,x=X/255, x/255

model = tf.keras.Sequential([
    tf.keras.layers.InputLayer(input_shape=(32,32,3)),
    tf.keras.layers.Conv2D(96,(5,5),(1,1)),
    tf.keras.layers.BatchNormalization(), # 배치 정규화 : 데이터의 분포가 흐트러질때 재조정해주는 기능
    tf.keras.layers.Dropout(0.2), # 레이어당 랜덤하게 학습하여 학습 데이터의 정확도를 올리는 것
    tf.keras.layers.ReLU(),
    tf.keras.layers.MaxPooling2D((3,3),(2,2)),
    tf.keras.layers.Conv2D(56,(5,5),(1,1),activation='relu',padding='same'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.MaxPooling2D((3,3),(2,2)),
    tf.keras.layers.Conv2D(84,(3,3),(1,1),activation='relu',padding='same'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Conv2D(84,(3,3),(1,1),activation='relu',padding='same'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Conv2D(56,(3,3),(1,1),activation='relu',padding='same'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.MaxPooling2D((3,3),(2,2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(496),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dense(96),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dense(10,activation='softmax')
])

model.summary()

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

model.fit(X,YT,epochs=5)

model.evaluate(x,yt)

 

 

 

 

 

 

 

728x90
반응형