Keras

2017-12-18 25 views
0

에서 model.predict()를 사용하려고 시도 할 때 크기가 잘못되었습니다. 코드가 그 자체로 말하지만 모델을 훈련 시켰다고 생각합니다. 이제는 새로운 입력 데이터를 예측하는 데 사용하고 싶습니다. 새로운 입력 데이터가 잘못된 치수 인 것 같습니다. 당신이 모델과 예측 모두에 대한 코드 및 오류 메시지를 볼 수 있습니다 예측하고 오류 메시지가하려고 지금Keras

tokenizer = Tokenizer(num_words=10000) 

df = pd.read_csv('/home/paperspace/Sentiment Analysis Dataset.csv', index_col = 0, 
       error_bad_lines = False) 

y = list(df['Sentiment']) 

tokenizer.fit_on_texts(list(df['SentimentText'])) 
X = tokenizer.texts_to_sequences(list(df['SentimentText'])) 
X = pad_sequences(X) 

print("Done, fitting on texts.") 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, shuffle = True) 

model = Sequential() 
#Creates the wordembeddings. 
embedding_vector_dim = 32 
model.add(Embedding(10000, embedding_vector_dim, input_length=X.shape[1])) 
model.add(Dropout(0.2)) 
model.add(LSTM(128)) 
model.add(Dropout(0.2))   
model.add(Dense(1, activation='sigmoid')) 

model.compile(loss='binary_crossentropy', 
       optimizer='adam', 
       metrics=['accuracy']) 
model.summary() 


model.fit(numpy.array(X_train), numpy.array(y_train), 
      batch_size=128, 
      epochs=1, 
      validation_data=(numpy.array(X_test), numpy.array(y_test))) 
score, acc = model.evaluate(numpy.array(X_test),numpy.array(y_test), 
          batch_size=128) 

model.save('./sentiment_seq.h5') 

print('Test score:', score) 
print('Test accuracy:', acc) 

을 (시도). 훈련 및 예측할 때 전처리가 동일 그래서 기본적으로

text = "this is actually a fucking shit movie." 
tokenizer = Tokenizer() 

tokenizer.fit_on_texts(list(text)) 
X = tokenizer.texts_to_sequences(list(text)) 
X = pad_sequences(X) 
X_flat = np.array([X.flatten()]) 


model = load_model('sentiment_test.h5') 
model.compile(loss='binary_crossentropy', 
       optimizer='adam', 
       metrics=['accuracy']) 
print(model.predict(X, batch_size = 1, verbose = 1)) 

ValueError: Error when checking : expected embedding_1_input to have shape (None, 116) but got array with shape (1, 38) 

이유는이 오류를 얻고, 방법은 내가 예상 입력이 오류 메시지가 표시되기 전에해야 무엇을 알 수 있는가?

답변

1

고정 된 입력 길이로 작업하지 않는 경우 임베드 레이어에 input_length을 정의하면 안됩니다.

+0

나는 그것을 알아 낸 것 같습니다. 나는 문장을 패딩 할 때 고정 입력을 사용한다고 가정하고, X.shape [1]이 무엇인지 알아 내야하고, 예측할 때 그 길이만큼의 모든 새로운 입력을 덧붙여 야합니다. – sn3jd3r