# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + [markdown] id="view-in-github" colab_type="text"
# <a href="https://colab.research.google.com/github/ginttone/multi_deeplearning/blob/master/multi_perceptron.ipynb" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>

# + id="ooskRt7gxTRs"
import tensorflow as tf

# + colab={"base_uri": "https://localhost:8080/"} id="gyVquDxUxq4C" outputId="4c46288f-b2bf-408d-aebc-393251644604"
x_data = [[0,0],
          [1,0],
          [0,1],
          [1,1]]
y_data = [[0],
          [1],
          [1],
          [1]]

type(x_data),type(y_data)

# + [markdown] id="bmCtQ5Y4ySiw"
# ## 넘파이 어레이로 바꿈

# + id="4fi-7hBSx5zB"
import numpy as np

# + colab={"base_uri": "https://localhost:8080/"} id="i8K_hswJx77S" outputId="f30a456d-d584-4888-bdf7-c8acd3e3cd4b"
x_train = np.array(x_data)
y_train = np.array(y_data)
x_train.shape , y_train.shape

# + [markdown] id="FfnBdew1yLwr"
# ## 딥러닝에 넣어주는 작업(모델만들기)
#
# **create model**
#
# multi perceptron(layer가 한 개 이상)의 사용
#
# solve XOR model(XOR 해결하기) 

# + id="61d7dntdyKGh"
model = tf.keras.models.Sequential()

# + colab={"base_uri": "https://localhost:8080/"} id="YJDiAlCi07nz" outputId="ca8c7ff6-411c-4616-b970-c8a34f90b80d"
model.add(tf.keras.Input(shape=(2,)))  # input layer 1차원

# + id="KiY61-RT250O"
model.add(tf.keras.layers.Dense(2,activation='sigmoid'))

# model.add(tf.keras.layers.Dense(128,activation='sigmoid')) # 기능 layer
# model.add(tf.keras.layers.Dense(128,activation='sigmoid'))

# + [markdown] id="RatVfV0b3Cgp"
# 엑티베이션 펑션(활성화 함수) 사용
#
# dense자체는 regrassin 이어서 activation을 넣어줘야한다

# + id="6-RF13hh12B3"
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))# output layer

# + [markdown] id="SYStxNZVC0J7"
# metrics=['acc'] 정확도 측정할 때 필요 

# + id="P5Y-mWr_8OOV"
model.compile(optimizer='sgd', loss='mse', metrics=['acc'])

# + id="2Ytyc3sw8xxu"
# tf.keras.utils.plot_model(model, show_shapes=True)

# + [markdown] id="DgyBFYEE_JYB"
# 기능 layer부분 개수를 늘리기

# + colab={"base_uri": "https://localhost:8080/"} id="rNKay-a98U1D" outputId="1a95cc18-a261-4eb8-a033-492624086799"
model.fit(x_train, y_train, epochs=100) 

# + [markdown] id="uxJkWcDQ_n5X"
# ## loss 체크 : 숫자가 낮을 수록 좋다
#
# 기능 레이어 Dense 2 로 변화 체크
#
# epochs = 100 한 번 loss: 0.2202
#
# 기능 레이어 Dense 32 늘리고 변화 체크 
#
# epochs = 100 한 번 loss: 0.1904
#
# 기능 레이어 Dense 132 늘리고 변화 체크
#
# epochs = 100 한 번 loss: 0.1848
#
# 기능 레이어 Dense 128*2 하고 변화 체크
#
# epochs = 100 한 번 loss: 0.1865 array = 0.7413647
#
# **결론**: 성능을 높이려면 
#
# Dense 높이거나, 
#
# 기능레이어 여러번(2번) 쌓거나, 
#
# 에폭 횟수를 늘리면 된다
#

# + colab={"base_uri": "https://localhost:8080/"} id="5fWvq9yP9blh" outputId="9b39b414-3002-423e-bbbc-e9c4bd970f04"
model.predict([[0,1]])

# + [markdown] id="DNyJp7WTB1NL"
# ## evaluate() 정확도 : 숫자가 높을 수록 좋다
#
# sklearn이랑 동일한 아이 

# + colab={"base_uri": "https://localhost:8080/"} id="KaLlvvkn-3p0" outputId="177ee3ed-0a6c-41cf-98e5-e57af78c0e36"
model.evaluate(x_train, y_train)

# + id="TBpnuQIzCXP9" colab={"base_uri": "https://localhost:8080/"} outputId="064a0df6-244d-4a82-e75d-8fa8895abbb5"
model.weights

# + [markdown] id="FdR05IS53azZ"
# [구조확인](https://playground.tensorflow.org/
# )

# + colab={"base_uri": "https://localhost:8080/"} id="RdjfHUKr1uD8" outputId="2356ce13-1910-4cd9-950d-332efc54fbdc"
model.summary()

# + [markdown] id="L2G_XNYPjZGd"
# [문자 연산가능 사이트](https://word2vec.kr/search/)

StarcoderdataJupyterScriptsDedupFiltered