inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

딥러닝 CNN 완벽 가이드 - TFKeras 버전

모델 구현 질문

311

seook6853

작성한 질문수 4

0

안녕하세요 강사님! 강의 매우 잘듣고 있는 학생입니다.

제가 텐서플로우에 다른 스타일로 모델을 구현하는 법이 있길래 본 강의에서 초반에 regression하는 부분을 작성해보앗습니다.

이렇게 작성하였는데 예측을 해보면 예측 값 정확도가 매우 떨어집니다.

 

제가 보기에는 두 모델 코드를 작성한 스타일만 다르고 모두 같다고 생각되는데 왜 예측값이 많이 다른지 모르겠습니다..

혹시 이부분이 왜 그런지 알 수 있을까요..??

 

cnn 딥러닝 tensorflow kaggle 머신러닝 배워볼래요? keras

답변 1

0

권 철민

안녕하십니까, 

전체 소스코드를 텍스트로 올려 주시겠습니까, 제가 수행해 보고 말씀드리겠습니다. 

감사합니다. 

0

seook6853

이렇게 하였습니다!

#데이터 받기

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