RNN with keras

2879 단어 keras
1. 간단한 RNN 프로그램 - 텍스트 생성
RNN은 NLP 분야에서 광범위하게 응용되고 있는데 그 중 하나는 언어 모델을 구축하는 것이다.언어 모델은 우리가 앞에서 정한 상황에서 다음 단어의 가능성을 예측할 수 있게 한다.
여기서 우리는 언어 모델을 바탕으로 상위 10개의 문자를 정한 상황에서 다음 문자를 예측한다.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Jun  4 17:18:03 2018

@author: john
"""

from keras.layers import Dense,Activation
from keras.layers.recurrent import SimpleRNN
from keras.models import Sequential
from keras.utils.vis_utils import plot_model
import numpy as np

####load data
fin=open('./11-0.txt','rb')
lines=[]
for line in fin:
    line=line.strip().lower()
    line=line.decode('ascii','ignore')
    if len(line)==0:
        continue
    lines.append(line)
fin.close()
text=' '.join(lines)

####creat the lookup tables
chars=set([c for c in text])
nb_chars=len(chars)
char2index=dict((c,i) for i,c in enumerate(chars))
index2char=dict((i,c) for i,c in enumerate(chars))

####create the input and label texts
SEQLEN=10
STEP=1

input_chars=[]
label_chars=[]

for i in range(0,len(text)-SEQLEN,STEP):
    input_chars.append(text[i:i+SEQLEN])
    label_chars.append(text[i+SEQLEN])

####vectorize teh input data and label texts
X=np.zeros((len(input_chars),SEQLEN,nb_chars),dtype=np.bool)
y=np.zeros((len(input_chars),nb_chars),dtype=np.bool)    
for i,input_char in enumerate(input_chars):
    for j,ch in enumerate(input_char):
        X[i,j,char2index[ch]]=1
    y[i,char2index[label_chars[i]]]=1


####define the model
HIDDEN_SIZE=128
BATCH_SIZE=128
NUM_ITERATIONS=25
NUM_EPOCHES_PER_ITERATION=1
NUM_PERDS_PER_EPOCH=100
model=Sequential()
model.add(SimpleRNN(HIDDEN_SIZE,return_sequences=False,input_shape=(SEQLEN,nb_chars),
                    unroll=True))
model.add(Dense(nb_chars,activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='rmsprop')

####test
for iteration in range(NUM_ITERATIONS):
    print('='*50)
    print('iteration #:%d'%(iteration))
    model.fit(X,y,batch_size=BATCH_SIZE,epochs=NUM_EPOCHES_PER_ITERATION)
    
    test_idx=np.random.randint(len(input_chars))
    test_chars=input_chars[test_idx]
    print('Generating from seed:%s'%(test_chars))
    print(test_chars,end=' ')
    for i in range(NUM_PERDS_PER_EPOCH):
        Xtest=np.zeros((1,SEQLEN,nb_chars))
        for i,ch in enumerate(test_chars):
            Xtest[0,i,char2index[ch]]=1
        pred=model.predict(Xtest,verbose=0)[0]
        ypred=index2char[np.argmax(pred)]
        print(ypred,end='')
        test_chars=test_chars[1:]+ypred


테스트는 열 개의 문자를 주어서 그것을 계속 순환해서 생성하게 하고 어떤 물건을 생성할 수 있는지 보는 것이다.
2. LSTM---감정 분석
LSTM은 다대일 RNN을 훈련시키는 데 쓸 수 있다.
우리는 이 훈련 모델에서 모델이 한 문장을 입력하고 값을 출력한다(긍정적이거나 소극적이다).우리 훈련집에는 formUMICH SI650 Kaggle 경연대회가 약 7000개 포함되어 있다.문장마다 label 0 또는 1.

좋은 웹페이지 즐겨찾기