모델 구현 질문
311
작성한 질문수 4
안녕하세요 강사님! 강의 매우 잘듣고 있는 학생입니다.
제가 텐서플로우에 다른 스타일로 모델을 구현하는 법이 있길래 본 강의에서 초반에 regression하는 부분을 작성해보앗습니다.
이렇게 작성하였는데 예측을 해보면 예측 값 정확도가 매우 떨어집니다.
제가 보기에는 두 모델 코드를 작성한 스타일만 다르고 모두 같다고 생각되는데 왜 예측값이 많이 다른지 모르겠습니다..
혹시 이부분이 왜 그런지 알 수 있을까요..??
답변 1
0
안녕하십니까,
전체 소스코드를 텍스트로 올려 주시겠습니까, 제가 수행해 보고 말씀드리겠습니다.
감사합니다.
0
이렇게 하였습니다!
#데이터 받기
from sklearn.datasets import load_boston
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
boston = load_boston()
bostonDF = pd.DataFrame(boston.data, columns=boston.feature_names)
bostonDF['PRICE'] = boston.target
scaler = MinMaxScaler()
scaled_features = scaler.fit_transform(bostonDF[['RM', 'LSTAT']])
#모델 구조 구현
class Regression(tf.keras.Model):
def __init__(self):
super(Regression, self).__init__()
self.regression_layer = tf.keras.layers.Dense(1,
activation = None,
#W값
kernel_initializer = "zeros",
#B값
bias_initializer="zeros")
def call(self, x):
#인자를 넣어서 softmax_layer연산 수행
logits = self.regression_layer(x)
#Dense를 지난 결과에 softmax 씌워서 반환
return logits
#손실함수 정의
@tf.function
def mse_loss(y_pred, y):
return tf.reduce_mean(tf.square(y_pred-y))
#Optimizer
optimizer = tf.optimizers.Adam(0.01)
#GD정의
@tf.function
def train_step(model, x, y):
with tf.GradientTape() as tape:
y_pred = model(x)
loss = mse_loss(y_pred, y)
#GD가 계산되는 시점, model.trainable_variable은 자동으로 갱신이 요구되는 변수값을 할당해줌.
gradients = tape.gradient(loss, model.trainable_variables)
#Optimizer를 통해서 갱신이 이루어지는 시점
optimizer.apply_gradients(zip(gradients,model.trainable_variables))
#학습 시행
Regression_model = Regression()
for i in range(1000):
train_step(Regression_model, scaled_features.astype("float32"),bostonDF["PRICE"].values.astype("float32") )
print("end")
#첫번째 price 예측
predicted = Regression_model.predict(scaled_features)
predicted[0]
감사드립니다!
0
음, 이유는 잘 모르겠지만, loss가 epoch 3000번 이상이 될 때까지, 잘 안줄어 드는 군요.
아래는 코드입니다.
optimizer = tf.optimizers.Adam(0.01)
def mse_loss(y_pred, y):
return tf.reduce_mean(tf.square(y_pred-y))
def train_step(model, x, y):
with tf.GradientTape() as tape:
y_pred = model(x)
loss = mse_loss(y_pred, y)
tf.print("loss:", loss)
#GD가 계산되는 시점, model.trainable_variable은 자동으로 갱신이 요구되는 변수값을 할당해줌.
gradients = tape.gradient(loss, model.trainable_variables)
#Optimizer를 통해서 갱신이 이루어지는 시점
optimizer.apply_gradients(zip(gradients,model.trainable_variables))
Regression_model = Regression()
for i in range(4000):
print('epoch:', i)
train_step(Regression_model, scaled_features.astype("float32"),bostonDF["PRICE"].values.astype("float32") )
print("end")
GradientTape을 적용하지 않으면 성능이 나아집니다. 왜 GradientTape시 성능이 떨어지는지 이유를 좀 더 찾아 봐야 할 것 같습니다.
model = Regression()
# Adam optimizer를 이용하고 Loss 함수는 Mean Squared Error, 성능 측정 역시 MSE를 이용하여 학습 수행.
model.compile(optimizer=Adam(learning_rate=0.01), loss='mse', metrics=['mse'])
model.fit(scaled_features, bostonDF['PRICE'].values, epochs=1000)
resize 질문
0
60
1
20251212 Kaggle 런타임에 scikit-learn 설치 실패 트러블 슈팅
0
86
1
Loss와 매트릭 관계
0
75
2
Boston 코랩 실습
0
170
2
배치 정규화의 이해와 적용 2 강의 질문
0
143
2
Augmentation원본에 적용해서 데이터 갯수 자체를 늘리는 행위는 의미가있나요?
0
151
2
Conv함수 안에 activation 을 넣지 않는 이유가 뭔지 궁금합니다.
0
212
2
소프트맥스 관련 질문입니다
0
214
1
강의 관련 질문입니다
0
161
2
residual block과 identity block의 차이
0
199
2
옵티마이저와 경사하강법의 차이가 궁금합니다.
1
250
1
실습 환경
0
171
2
입력 이미지 크기
0
256
2
데이터 증강
0
203
2
albumentations ShiftScaleRotate
0
210
1
Model Input Size 관련
0
292
1
마지막에 bird -> frog 말고도 deer -> frog 도 잘못된것 아닌가요??
0
206
1
일반적인 질문 (kaggle notebook사용)
0
274
2
실무에서 Augmentation 적용 시
0
346
2
안녕하세요 교수님
0
235
1
가중치 초기화(Weight Initialization) 질문입니다.
0
332
1
테스트 데이터셋 predict의 'NoneType' object has no attribute 'shape' 오류
0
412
1
학습이 이상하게 됩니다.
2
1040
2
boston import가 안됩니다
0
230
1





