

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












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


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





- 클래스 정의시 소괄호 안에 부모 클래스가 명시됨.
 add_weight()는 부모클래스인tf.keras.layers.Layer클래스에 속하는 메서드이다.
shape와initializer를 지정하여 가중치가 어떤 크기(모양)를 갖고, 어떻게 초기화될지 정의할 수 있음.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()메서드는 옵티마이저를 사용하여 가중치를 업데이트함.(계산된 기울기와 가중치를 가지고)




