728x90
반응형
[youtube] Deep Learning Full Tutorial Course using TensorFlow and Keras - 이수안컴퓨터연구소 참고
🧡목차
딥러닝 구조 및 학습
2. 모델(Model)
1) 딥러닝모델을 구성하는 3가지 방법
- Sequential
- API함수
- 서브클래싱(Subclassing)
딥러닝 구조 및 학습
- 딥러닝 구조와 학습에 필요한 요소
- 모델(네트워크)를 구성하는 레이어(layer)
- 입력 데이터와 그에 대한 목적(결과)
- 학습시에 사용할 피드백을 정의하는 손실 함수(loss function)
- 학습 진행 방식을 결정하는 옵티마이저(optimizer)
2. 모델(Model)
- 딥러닝 모델은 레이어로 만들어진 비순환 유향 그래프(Directed Acyclic Graph, DAG) 구조
1) 딥러닝 모델을 구성하는 법 3가지
- Sequential()
- 함수형 API
- 서브클래싱(Subclassing)
1) Sequential()
- 모델이 순차적인 구조로 진행할 때 사용
- 간단한 방법
- Sequential 객체 생성 후,add()를 이용한 방법
- Sequential 인자에 한번에 추가 방법
- 다중 입력 및 출력이 존재하는 등의 복잡한 모델을 구성할 수 없음
from tensorflow.keras.layers import Dense, Input, Flatten
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.utils import plot_model #모델을 이미지로 출력
# 방법1 - add
model = Sequential()
model.add(Input(shape=(28,28)))
model.add(Dense(300, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(10, activation='softmax'))
model.summary() #input정보 없음
#방법2 - list
model = Sequential([Input(shape=(28,28), name='Input'),
Dense(300, activation='relu', name='Dense1'),
Dense(100, activation='relu', name='Dense2'),
Dense(10, activation='softmax', name='Output')])
model.summary()
# 모델 이미지 출력
plot_model(model)
2) 함수형 API
- 가장 권장되는 방법
- 모델을 복잡하고, 유연하게 구성 가능
- 다중 입출력을 다룰 수 있음
#단순모델
inputs = Input(shape=(28,28,1))
x = Flatten(input_shape=(28,28,1))(inputs)
x = Dense(300, activation='relu')(x)
x = Dense(100, activation='relu')(x)
x = Dense(10, activation='softmax')(x)
mdoel = Model(inputs=inputs, outputs=x)
model.summary()
#좀 더 복잡한 모델 만들기 - 유닛합치기(concat)
from tensorflow.keras.layers import Concatenate
input_layer = Input(shape=(28,28))
hidden1 = Dense(100, activation='relu')(input_layer)
hidden2 = Dense(30, activation='relu')(hidden1)
concat = Concatenate()([input_layer, hidden2])
output = Dense(1)(concat) #유닛1개
model = Model(inputs=[input_layer], outputs=[output])
model.summary()
plot_model(model)
# 입력2개, 출력2개인 복잡한 모델 만들기
input_1 = Input(shape=(10, 10), name='input_1')
input_2 = Input(shape=(10, 28), name='input_2')
hidden1 = Dense(100, activation='relu')(input_2)
hidden2 = Dense(10, activation='relu')(hidden1)
concat = Concatenate()([input_1, hidden2])
output = Dense(1, activation='sigmoid', name='main_output')(concat)
sub_out = Dense(1, name='sum_output')(hidden2)
model = Model(inputs=[input_1, input_2], outputs=[output, sub_out])
model.summary()
plot_model(model)
3) 서브클래싱(Subclassing)
- 커스터마이징에 최적화된 방법
- Model 클래스를 상속받아 Model이 포함하는 기능을 사용할 수 있음
- fit(), evaluate(), predict()
- save(), load()
- 주로 call() 메소드안에서 원하는 계산 가능
- for, if, 저수준 연산 등
- 권장되는 방법은 아니지만 어떤 모델의 구현 코드를 참고할 때, 해석할 수 있어야함
class MyModel(Model):
def __init__(self, units=30, activation='relu', **kwargs):
super(MyModel, self).__init__(**kwargs)
self.dense_layer1 = Dense(300, activation=activation)
self.dense_layer2 = Dense(100, activation=activation)
self.dense_layer3 = Dense(units, activation=activation)
self.output_layer = Dense(10, activation='softmax')
def call(self, inputs):
x = self.dense_layer1(inputs)
x = self.dense_layer2(x)
x = self.desne_layer3(x)
x = self.output_layer(x)
return x
728x90
반응형
'딥러닝 (Deep Learning) > tensorflow, keras' 카테고리의 다른 글
챗봇 실습 - 위로해주는 챗봇 (0) | 2021.10.23 |
---|---|
[tensorflow, keras] 딥러닝 기본 코드(2-3,4) 모델 컴파일(손실함수, 최적화, 지표), 모델 학습 평가 예측 (0) | 2021.10.15 |
[tensorflow, keras] 딥러닝 기본 코드(2-2) 모델 가중치 확인 (0) | 2021.10.14 |
[tensorflow, keras] 딥러닝 기본 코드(1) - Layer(Dense, Activation, Flatten, Input) (0) | 2021.10.14 |
[tensorflow] 텐서 기본코드 (0) | 2021.10.14 |