프레임워크 선택 - Tensorflow(Keras)

    보통 Tensorflow, Pytorch 둘 중 하나 쓰는데 나는 파이토치가 익숙하지만, 수업에서는 tensorflow의 keras를 써서 더 잘 됐다는 생각이 들었다. tensorflow도 연습을 할 수 있어서 일석이조다.

     

     

    Linear Regression / Logistic Regression

    import tensorflow as tf
    from tensorflow import keras
    import numpy as np

    기본 라이브러리 불러오기 - colab을 사용하면 별도의 설치 필요 없이 코드로 불러와 사용할 수 있다.

     

    x = np.array(range(30))
    y = x * 2 - 10
    
    print(x)
    print(y)

    x, y를 선언해주었다.

    x값을 토대로 y를 예측하는 간단한 선형 회귀 모델을 생성해보자.

    이 때, input은 x이고 output은 y이고, shape는 둘 다 (20,) 이다.

    이제 keras로 모델을 생성해보자.

    keras.backend.clear_session()	# 이전 모델 세션 클리어
    
    # 모델 생성
    
    model = keras.models.Sequential()
    
    # 모델 조립(인풋 사이즈 등 설정)
    
    model.add(keras.layers.Input(shape=(1,)))	# 입력 데이터의 모양을 model에 알려주는 것
    model.add(keras.layers.Dense(1))	# 입력과 출력을 연결해주는 Dense
    
    # 모델 컴파일
    
    model.compile(loss = 'mse', optimizer = 'adam')

    내가 생성하고 싶은 모델은 인풋 데이터가 1개고 출력값도 하나인(여러 class가 아닌) 모델이다.

    따라서 Input과 Dense 모두 1

    이제 모델을 학습시켜보자.

    model.fit(x, y, epochs=10, verbose=1)

    loss가 떨어지긴 하는데, 엄청난 로스의 모델 = 망한..모델? 임을 확인할 수 있다.

    import matplotlib.pyplot as plt
    plt.plot(y)
    plt.plot(model.predict(x), color = 'r')
    plt.show()

    결과를 한번 플롯해보자, 파랑이 우리가 원하는 값, 빨강이 모델이 예측한 값이다

    ㅋㅋㅋㅋㅋㅋㅋㅋ

    아무튼 이렇게 첫 케라스 모델을 생성해봤다.

     

     

    sklearn 데이터 불러와서 사용해보기

     

    from sklearn.datasets import load_boston
    
    boston = load_boston()
    
    x = boston.data
    y = boston.target

    제공되는 데이터셋을 이런 식으로 불러와 학습에 사용할 수 있다. 정말 좋은 세상...

    이제 이 데이터의 shape을 보면서 모델을 설계해보자.

    x.shape	# (506, 13)
    y.shape	# (506,)

     

    Input shape를 13을 줘야겠구나. 를 생각해줘야 한다.

    keras.backend.clear_session()
    
    model = keras.models.Sequential()
    
    model.add(keras.layers.Input(shape = (13,)))
    model.add(keras.layers.Dense(1))
    
    model.compile(loss='mse', optimizer='adam')
    이제 학습을 시키자.
    model.fit(x, y, epochs = 100, verbose = 1)

    결과 시각화는 다음과 같다.

    import matplotlib.pyplot as plt
    plt.plot(y, color = 'cyan')
    plt.plot(model.predict(x), color = 'pink')
    plt.show()

    뭐 결과는 안좋지만.. 텐서플로우 코드 익숙해지는데 의의를 두자. 나중 되면 엄청 결과 좋은 모델도 많이 할거니까.

     

    Binary Classifier

    이진 분류기 - sigmoid 사용하는 이진 분류기를 설계해보자.

    from sklearn.datasets import load_breast_cancer
    cancer = load_breast_cancer()
    x = cancer.data
    y = cancer.target
    x.shape, y.shape	# (569,30) (569,)

    설계한 모델은 다음과 같다.

    keras.backend.clear_session()
    
    model = keras.models.Sequential()
    
    #조립
    model.add(keras.layers.Input(shape=(30,)))
    model.add(keras.layers.Dense(1, activation = 'sigmoid'))
    model.compile(loss = 'binary_crossentropy', metrics = ['accuracy'], optimizer = keras.optimizers.Adam())
    model.fit(x, y, epochs = 100, verbose = 1)

     

    Multiclass

     

    그럼 붓꽃 종류 분류와 같은 멀티클래스 분류는 어떻게 설계할 수 있을까?

    from sklearn.datasets import load_iris
    iris = load_iris()
    x = iris.data
    y = iris.target
    x.shape, y.shape	#(150,4) (150, )

    약간의 전처리가 필요하다.

    iris.target_names	# array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
    
    y = to_categorical(y, 3)	# y를 [0, 0, 1] 형태로 변경
    keras.backend.clear_session()
    model = keras.models.Sequential()
    
    model.add(keras.layers.Input(shape = (4,)))
    model.add(keras.layers.Dense(3, activation = 'softmax'))
    
    model.compile(loss = 'categorical_crossentropy', metrics = ['accuracy'], optimizer = 'adam')
    
    model.summary()

    model.summary()를 사용하면 파라미터 개수 등 모델 정보를 볼 수 있다.

    model.fit(x, y, epochs = 100, verbose = 1)

     

    'AIVLE' 카테고리의 다른 글

    [AIVLE] 딥러닝 3일차(CIFAR) + Functional API  (1) 2023.03.02
    [AIVLE] 딥러닝 2일차  (0) 2023.02.28
    [AIVLE] 머신러닝  (0) 2023.02.24
    [KT AIVLE 3기] 이변량분석  (0) 2023.02.10
    [KT AIVLE 3기] 단변량분석  (0) 2023.02.09
    Posted by 저본