본문 바로가기

Deep Learning & AI/AI

Tensorflow2.0 각 CNN 코드 구현

참고) 해당 포스팅은 패스트 캠퍼스 100% 환급 챌린지 미션 기록용 포스팅이며, 강좌 내용에 맞추어 포스팅함을 언급

 

클립명 : PART2)TensorFlow 2.0과 Pytorch 프레임워크 기초

           07. TensorFlow2.0 - 각 Layer별 역활 개념 및 파라미터 파악 - 4 08. TensorFlow2.0 각 - Optimizer 및 Training 09. TensorFlow2.0 각 - Optimizer 및 Training(Expert)

 

이번 포스팅에서 언급할 내용은 따로 없다. 그동한 말로써 설명해왔던 것들은 Code로 구현하는 과정이며 Model 설정 -> 데이터 불로오기 -> Optimizer 및 Loss 함수 설정 -> Compile 설정 -> 실행  이러한 순서로 코드가 진행이 된다. 여기서 말하는 Model은 이전 포스팅에서 언급한 feature extracion 및 classification이 모두 구현되며, Dense까지도 몇개로 설정될지 구성한다.

 


import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras import datasets


input_shape = (28,28,1) # input variable의 shape를 알아야 한다
num_classes = 10 # 총 결과값 수 

inputs = layers.Input(input_shape, dtype = tf.float64)
net = layers.Conv2D(32, (3, 3), padding='SAME')(inputs)
net = layers.Activation('relu')(net)
net = layers.Conv2D(32, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(0.25)(net)

net = layers.Conv2D(64, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.Conv2D(64, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(0.25)(net)

net = layers.Flatten()(net)
net = layers.Dense(512)(net)
net = layers.Activation('relu')(net)
net = layers.Dropout(0.5)(net)
net = layers.Dense(10)(net)  # num_classes
net = layers.Activation('softmax')(net)

model = tf.keras.Model(inputs=inputs, outputs=net, name='Basic_CNN')

model

model.summary()

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Channel 차원 추가
x_train = x_train[..., tf.newaxis]
x_test = x_test[..., tf.newaxis]

# Data normalization
x_train, x_test = x_train/255.0, x_test/255.0

# tf.data
train_ds = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_ds = train_ds.shuffle(1000)
train_ds = train_ds.batch(32)

test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test))
test_ds = test_ds.batch(32)

import matplotlib.pyplot as plt

# train_ds.take()


for image, label in train_ds.take(2):
    plt.title(label[0].numpy())
    plt.imshow(image[0, :, :, 0], 'gray')
    plt.show()


# Training(Keras) Keras로 학습 할 때는 기존과 같지만, train_ds는 generator라서 그대로 넣을 수 있음
model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy')
model.fit(train_ds, epochs=10000)

# Optimization
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()
train_loss = tf.keras.metrics.Mean(name = 'train_loss')
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name = 'train_accuracy')
test_loss = tf.keras.metrics.Mean(name = 'test_loss')
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name = 'test_accuracy')

 

위의 코드가 앞에서 언급한 순서대로의 절차이며, 간락하게 작성했다. 딱히 이번 3 강의에서는 설명이 없었으며 코드만 구현했기에, 이렇게만 적어두고 포스팅을 마무리 한다.

(글자수 :Code포함 2000자 이상)

강의 소개 링크 : bit.ly/3cx6kMd