我在Keras中創建了一個文本分類器,並且我可以在Cloud ML上訓練Keras模型就好了:模型隨後部署在Cloud ML 。但是,當將文本傳遞給分類時,它會返回錯誤的分類:我強烈懷疑它沒有使用創建keras分類器時使用的相同分詞器/詞索引,並且用於標記新文本。在谷歌雲-ml引擎中使用的包裝keras tokenizer/word索引
我不確定如何沿着tokeniser /字索引到雲ML通過在訓練時:有一個以前SO question,但會
gcloud ml-engine jobs submit training
拿起包含單詞索引映射鹹菜或文本文件?如果是這樣,我應該如何配置setup.py文件?
編輯:
所以,我使用Keras到tokenise輸入文本,像這樣:
tokenizer = Tokenizer(num_words=MAX_NB_WORDS)
tokenizer.fit_on_texts(X_train)
sequences = tokenizer.texts_to_sequences(X_train)
word_index = tokenizer.word_index
如果我只是加載本地一個Keras模型,我省與示範所以:
model.save('model_embeddings_20epochs_v2.h5')
我還保存標記生成器,這樣我可以用它來標記新的數據:
with open("../saved_models/keras_tokenizer_embeddings_002.pickle", "wb") as f:
pickle.dump(tokenizer, f)
在新數據上,我還原了模型和標記器。
model = load_model('../../saved_models/model_embeddings_20epochs_v2.h5')
with open("../../saved_models/keras_tokenizer_embeddings_002.pickle", "rb") as f:
tokenizer = pickle.load(f)
我然後使用標記生成器將文本轉換爲序列的新數據,分類等
腳本爲雲ML作業不保存該標記者 - 我推測Keras腳本基本上使用相同的單詞索引。
....
X_train = [x.encode('UTF8') for x in X_train]
X_test = [x.encode('UTF8') for x in X_test]
# finally, vectorize the text samples into a 2D integer tensor
tokenizer = Tokenizer(num_words=MAX_NB_WORDS)
tokenizer.fit_on_texts(X_train)
sequences = tokenizer.texts_to_sequences(X_train)
word_index = tokenizer.word_index
print('Found %s unique tokens.' % len(word_index))
.....
# prepare embedding matrix
num_words = min(MAX_NB_WORDS, len(word_index))
embedding_matrix = np.zeros((num_words, EMBEDDING_DIM))
for word, i in word_index.items():
if i >= MAX_NB_WORDS:
continue
embedding_vector = embeddings_index.get(word)
if embedding_vector is not None:
# words not found in embedding index will be all-zeros.
embedding_matrix[i] = embedding_vector
# load pre-trained word embeddings into an Embedding layer
# note that we set trainable = False so as to keep the embeddings fixed
embedding_layer = Embedding(num_words,
EMBEDDING_DIM,
weights=[embedding_matrix],
input_length=MAX_SEQUENCE_LENGTH,
trainable=False)
目前,我只訓練它在本地。
gcloud ml-engine local train \
--job-dir $JOB_DIR \
--module-name trainer.multiclass_glove_embeddings_v1 \
--package-path ./trainer \
-- \
--train-file ./data/corpus.pkl
您能否提供代碼片段或指向您的代碼的鏈接,或者提供更多關於如何使用單詞索引映射的上下文? – rhaertel80
現在添加了代碼/上下文。 –