임 LSTM가 Keras에서 작업하지만, 심지어 첫 번째 시대 이후, 정확도 (90 %)도 높은 것으로 보인다 걱정 임 제대로 훈련되지려고,이 게시물에서 몇 가지 아이디어를했다 : 여기 Keras LSTM 정확도도 높은
https://machinelearningmastery.com/text-generation-lstm-recurrent-neural-networks-python-keras/
내 코드입니다 : 여기import numpy
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from keras.preprocessing.sequence import pad_sequences
from pandas import read_csv
import simplejson
numpy.random.seed(7)
dataset = read_csv("mydataset.csv", delimiter=",", quotechar='"').values
char_to_int = dict((c, i) for i, c in enumerate(dataset[:,1]))
int_to_char = dict((i, c) for i, c in enumerate(dataset[:,1]))
f = open('char_to_int_v2.txt', 'w')
simplejson.dump(char_to_int, f)
f.close()
f = open('int_to_char_v2.txt', 'w')
simplejson.dump(int_to_char, f)
f.close()
seq_length = 1
max_len = 5
dataX = []
dataY = []
for i in range(0, len(dataset) - seq_length, 1):
start = numpy.random.randint(len(dataset)-2)
end = numpy.random.randint(start, min(start+max_len,len(dataset)-1))
sequence_in = dataset[start:end+1]
sequence_out = dataset[end + 1]
dataX.append([[char[0], char_to_int[char[1]], char[2]] for char in sequence_in])
dataY.append([sequence_out[0], char_to_int[sequence_out[1]], sequence_out[2]])
X = pad_sequences(dataX, maxlen=max_len, dtype='float32')
X = numpy.reshape(X, (X.shape[0], max_len, 3))
y = numpy.reshape(dataY, (X.shape[0], 3))
batch_size = 1
model = Sequential()
model.add(LSTM(32, input_shape=(X.shape[1], X.shape[2])))
model.add(Dropout(0.2))
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
n_epoch = 1
for i in range(n_epoch):
model.fit(X, y, epochs=1, batch_size=batch_size, verbose=1, shuffle=False)
model.reset_states()
model.save_weights("weights.h5")
model.save('model.h5')
with open('model-params.json', 'w') as f:
f.write(model.to_json())
scores = model.evaluate(X, y, verbose=0)
print("Model Accuracy: %.2f%%" % (scores[1]*100))
내 데이터 집합 모습처럼 :
"time_date","name","user_id"
1402,"Sugar",3012
1402,"Milk",3012
1802,"Tomatoes",3012
1802,"Cucumber",3012
etc...
내 순서의 왼쪽 패딩 제로를, 그래서 때문에 내가 뭔가에 처음 3 개 결과를 만든다면 내가 이해에서
, 내 DATAX이의 형태가됩니다 (N_SAMPLES, 5, 3)은 (될 것입니다 두 번째 열은 임 예와 같은 임의의 숫자) 퍼팅 있도록 char_to_int의 FUNC을 기반으로합니다
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [1402, 5323, 3012], [1402, 5324, 3012]]
을 그리고 내 dataY은 다음과 같습니다
[[1802, 3212, 3012]]
가 맞습니까? 이 한 시대 이후의 출력이기 때문에 그렇다면, 뭔가 확실히 잘못해야합니다 :이 모델을 거의 다 해요하지만 중요한 뭔가가있어 내가 모르는 같은 느낌
9700/9700 [==============================] - 31s - loss: 10405.0951 - acc: 0.8544
Model Accuracy: 87.49%
무엇 나는 이것에 대한 어떤 지침도 감사 할 것이다. 감사.
지붕을 통해 당신의 손실을보세요. Y 데이터는 무엇입니까? 게시 한 샘플은 수천 개이며 바이너리 분류를 수행하고 있기 때문에 1과 2가 모두 포함 된 바이너리 배열이어야합니다. 그래서 출력이 이상하다 – DJK
몇 개의 수업이 있습니까? 수업 균형이 잡혀 있습니까? 아마도 예제와 네트워크 단순의 90 %를 정확하게 나타내는 클래스가이 클래스를 항상 예측하도록 배웁니다. –