[Aiffel] 아이펠 25일차 개념 정리 및 회고

Gongsam·2022년 1월 28일
0

1. 딥러닝 개념 - Tensorflow v2 api

1) Sequential Model

기본 형식

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential()
model.add(넣고싶은 레이어)
model.add(넣고싶은 레이어)
model.add(넣고싶은 레이어)

model.fit(x, y, epochs=10, batch_size=32)

- 모델의 입출력이 여러 개인 경우 적절하지 않음.

### 2) Functional API
```python
import tensorflow as tf
from tensorflow import keras

inputs = keras.Input(shape=(x,y,z)) (x*y*z)의 차원으로 정의됨
x = keras.layers.__넣고싶은 레이어__(채널 수, 커널의 크기, activation=활성화 함수 종류)(input)
x = keras.layers.__넣고싶은 레이어__(관련 파라미터)(x)
outputs = keras.layers.__넣고싶은 레이어__(관련 파라미터)(x)

model = keras.Model(inputs=inputs, outputs=outputs)
model.fit(x,y, epochs=10, batch_size=32)
  • sequential model과의 차이
    • 곧 바로 keras.Model 이용
      • sequential model이 keras.model을 상속받아 확장한 사례기 때문에 더 functional이 더 일반적이라고 할 수 있음
    • 더 자유로운 모델링 가능
  • 함수형으로 모델을 구성한다 = 입출력을 규정해 모델 전체를 규정함
    • Input을 지정: 텐서가 여러 개일 수 있음
  • 다중입출력 가능

3) Subclassing

import tensorflow as tf
from tensorflow import keras

class CustomModel(keras.Model):
    def __init__(self):
        super().__init__()
        self.conv1 = keras.layers.Conv2D(32, 3, activation='relu')
        self.conv2 = keras.layers.Conv2D(64, 3, activation='relu')
        self.flatten = keras.layers.Flatten()
        self.fc1 = keras.layers.Dense(128, activation='relu')
        self.fc2 = keras.layers.Dense(10, activation='softmax')
        
    def call(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = self.flatten(x)
        x = self.fc1(x)
        x = self.fc2(x)       
        return x
    
model = CustomModel()
model.fit(x,y, epochs=10, batch_size=32)
  • keras.Model을 상속받음
  • init 매소드 안에서 레이어를 구성함
  • call 매소드 안에서 순전파를 구현

4) GradientTape

  • tf.GradientTape
    • tape: 진행된 모든 연산의 중간 레이어값을 저장함
    • tape를 이용해 gradient를 계산하고 tape를 폐기하는 역할을 수행함
  • model.compile() 과정의 변형
    • tape.gradient()를 통해 매 스텝 학습이 진행될 때마다 발생하는 경사를 추출
    • optimizer.apply_gradients()를 통해 발생한 경사가 업데이트 해야할 파라미터 model.trainable_variables를 지정해 줌

2. 회고

tensorflow v2 api에 대한 개념을 학습한 후 알고리즘을 풀이했다. 기본적인 문제는 익숙하게 풀 수 있는데 조금이라도 응용되면 시간도 오래 걸리고 이해도 금방하지 못해서 사고력을 키울 수 있게 계속 단계적으로 생각하는 연습을 해야할 것 같다.

profile
🐬 파이썬 / 인공지능 / 머신러닝

0개의 댓글