데이터 취업 스쿨 스터디 노트 -(81)모델링 CNN(VGGNet)-Sequencial, Functional 모델링, subClass 모델링

테리·2024년 9월 26일
0

다시 살펴보기

CNN

VGGNet에서 사용되는 Layer들

tf.keras.layers.Conv2D
tf.keras.layers.Activation
tf.keras.layers.MaxPool2D
tf.keras.layers.Flatten
tf.keras.layers.Dense

Layer들을 이용해 모델 만들기 - Sequencial 방식

Functional 모델링

Functional API

  • Sequential에서는 model.add(Conv2D())와 같은 형식으로 사용했다면 이건 Conv2D와 같은 Functional 함수를 바로 사용하는 방식이다.
  • tf.keras.Sequential 보다 더 유연하게 모델을 정의할 수 있는 방법

Resnet 구현 -> 질문해야함

Resnet은 input과 output을 더하면서 학습을 시킴

input 값을 기억했다가 output에 더하려면 input 값을 기억해야한다.
Sequential 방식에서는 할 수 없어서 functional api를 사용함.

functional api는 주로 하나의 함수로 만들어서 관리함.

CIfar10 dataset을 이용해 학습

sub class 모델링

  • 클래스 정의시 소괄호 안에 부모 클래스가 명시됨.
  • add_weight()는 부모클래스인 tf.keras.layers.Layer 클래스에 속하는 메서드이다.
    • shapeinitializer를 지정하여 가중치가 어떤 크기(모양)를 갖고, 어떻게 초기화될지 정의할 수 있음.
    • trainable=True로 설정하여 가중치가 학습 과정에서 업데이트될 수 있도록 한다.
  • call() 매서드는 tf.keras.layers.Layer 부모클래스에서 정의된 규칙에 따라 동작함.
    - 그렇기에 call이라고 함수를 만들지 않고 다른 명칭으로 만들면 동작하지 않음.

__init__ 메서드는 클래스의 생성자(constructor)이다. 이 메서드는 클래스의 인스턴스(linear_layer = LinearRegression())가 생성될 때 호출된다.

units=1은 매개변수로, 이 클래스의 인스턴스를 만들 때 기본값이 1인 units라는 값을 받는다. 즉, 사용자가 LinearRegression()를 호출할 때 units 값을 지정할 수 있는 옵션을 제공하는 거다.

units=1은 LinearRegression 클래스의 인스턴스를 생성하면서 출력 차원이 1인 회귀 모델을 만들겠다는 의미

linear_layer = LinearRegression(1)는 call 메서드를 자동으로 호출하지는 않음. 단순히 클래스의 객체를 생성해주는 거다.
y_hat = linear_layer(X) 이 부분이 인스턴스에 X를 전달해서 call 메서드를 호출하는것이다.

tape.gradient(a, b)
a: 미분할 스칼라 값 (예: 손실값).
b: 기울기를 구하고자 하는 텐서들 (예: 가중치).

opt.apply_gradients() 메서드는 옵티마이저를 사용하여 가중치를 업데이트함.(계산된 기울기와 가중치를 가지고)

ResNet - Sub Class 로 구현 하기

학습시켜보기

0개의 댓글