Eggs Sunny Side Up
본문 바로가기
Computer Engineering/딥러닝

RNN_HELLO학습

by guswn100059 2023. 7. 10.
# 환경셋팅
import numpy as np
import random # 파이썬 랜덤수 출력하는 모듈

# simpleRNN 사용하기
# 과거 4개의 알파벳을 기억해서 다음에 등잘할 알파벳을 예측하는 모델 만들기
# hell > o
# appl > e
# 학습 데이터 hello, apple, lobby, daddy, hobby

# h, e, l, o, a, p, d, b, y => 9개
# 알파벳 하나가 특성 1개
# 원핫인코딩
h = [1,0,0,0,0,0,0,0,0]
# len(h)
e = [0,1,0,0,0,0,0,0,0]
l = [0,0,1,0,0,0,0,0,0]
o = [0,0,0,1,0,0,0,0,0]
a = [0,0,0,0,1,0,0,0,0]
p = [0,0,0,0,0,1,0,0,0]
d = [0,0,0,0,0,0,1,0,0]
b = [0,0,0,0,0,0,0,1,0]
y = [0,0,0,0,0,0,0,0,1]

# X(문제데이터)
# 답데이터 : o
# hello
X = np.array([[h, e, l, l],
             [a, p, p, l],
             [l, o, b, b],
             [d, a, d, d],
             [h, o, b, b]])
X
# 모델은 문자에 대한 해석 어려움 -> 수치화 학습

# y 데이터 생성
y = np.array([o, e, y, y, y])
y

# 데이터 크기 확인
X.shape, y.shape
# X크기 설명 : (sample, timestep, features)
# y크기 설명 : (sample, features)

### 모델링

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, SimpleRNN

# 뼈대 생성
rnn_model = Sequential()

# 층 내용 정의(입력층 + 중간층)
# input_shape=(timestep, features)
rnn_model.add(SimpleRNN(units=2, activation='tanh', input_shape=(4, 9)))

# 출력층
# 다중분류, units label 개수만큼 (9), 'softmax'
rnn_model.add(Dense(units=9, activation='softmax'))
# 모델 요약
rnn_model.summary()

# compile
# 다중분류 컴파일 연결
rnn_model.compile(loss='categorical_crossentropy',
                  optimizer='Adam',
                  metrics=['accuracy'])

# fit
# 반복횟수 1000
rnn_model.fit(X, y, epochs=1000)

# 예측
# 답 데이터에 대한 확률 정보 -> 9개가 출력
# 해당 알파벳에 대한 확률 정보가 크다면 -> 인덱스 확인 np.argmax()
class_names = ['h', 'e', 'l', 'o', 'a', 'p', 'd', 'b', 'y']
pre = rnn_model.predict([[h, e, l, l]])
pre

class_names[np.argmax(pre)]

'Computer Engineering > 딥러닝' 카테고리의 다른 글

로이터뉴스_제목분류하기  (0) 2023.07.10
yolov8_chinchilla_detect  (0) 2023.07.07
yolov6_chinchilla_detect  (0) 2023.07.07
mlp, cnn_개, 고양이_이미지데이터 _분류  (0) 2023.07.06
OpenCV04_픽셀 및 채널  (0) 2023.07.06

댓글