본문 바로가기
딥러닝\머신러닝

[딥러닝공부] 모델의 기본 - tensorflow

by 인포메틱스 2022. 5. 16.
반응형

내용 정리에 앞서서 내용이 괜찮으시다면 광고 클릭부탁드립니다~!

 

내용정리에 사용할 모델은 딥러닝에서 가장 기초적인 데이터인 Mnist 데이터를 사용한 모델을 기반으로 만들었습니다.

 

 그렇기 때문에 기본적인 옵션을 import및 다운을 시켜주도록 하겠습니다.

 

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

mnist=keras.datasets.mnist
(x_train,y_train), (x_test,y_test) = mnist.load_data()
x_train,x_test = x_train/255. , x_test/255.

 

tensorflow - keras에서 모델을 만드는 뼈대는 다양하게 있습니다.

 

그중에가 keras에서 가장 쉽게 만들 수 있는 모델은 Sequential API를 사용하는 방법입니다.

 

1. Sequential API 사용해서 모델제작

Sequential API는 Sequential한 모델을 하나 만들고 layer를 쌓는 방법입니다.

Sequential한 모델 또한 두가지 방법으로 가능합니다.

 

1-1 방법 1.

model = tf.keras.models.Sequential([
	tf.keras.layers.Flatten(input_shape=(28,28)),
    tf.keras.layres.Dense(128,activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10,activation='softmax')
    ])
    
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',
				metrics=['accuracy'])

1-2 방법 2.

model=tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(10,activation='softmax'))
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

Sequential한 방법은 그냥 쌓는다 정도로만 생각하시면 됩니다.

 

그리고 알아서 input을 계산해서 돌아가기 때문에 손쉽게 모델을 제작할 수가 있습니다.

 

2. Keras Functional API 사용해서 모델 제작

 Keras Functional API의 경우 layer마다 뒤에 괄호를 치고 input layer를 해줘야 합니다.

inputs = tf.keras.Input(shape = (28, 28))
flatten = tf.keras.layers.Flatten()(inputs)
dense = tf.keras.layers.Dense(128, activation='relu')(flatten)
drop = tf.keras.layers.Dropout(0.2)(dense)
outputs = tf.keras.layers.Dense(10,activation = 'softmax')(drop)
model=keras.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

 

3. Model Class Subclassing 사용

 

keras model을 상속받는 방법임.

 

class SubClassModel(keras.Model):
	def __init__(self):
    		super(SubClassModel, self).__init__()
        	self.flatten = keras.layers.Flatten(input_shape = (28, 28))
        	self.dense1 = keras.layers.Dense(128, activation = 'relu')
        	self.drop = keras.layers.Dropout(0.2)
        	self.dense2 = keras.layers.Dense(10,activation = 'softmax')
	def call(self, x, training=False):
    		x=self.flatten(x)
        	x=self.dense1(x)
        	x=self.drop(x)
        	return self.dense2(x)

 

3번 모델의 경우 pytorch에서도 비슷하게 사용이 되기 때문에 알아두면 좋습니다.

 

일단 Tensorflow에 대해서 3가지 모델 제작 방법에 대해 정리해보았습니다.

 

저도 class 상속을 받는 부분은 잘 쓰지 않아서 어색한 것이 있는데, 추후에 기회가 되면 포스팅을 해보도록 하겠습니다.

 

감사합니다.

728x90
반응형

댓글