我是机器学习新手,我正在尝试训练一个能够检测
Prague
一句话中的城市。它可以有多种词形。
布拉格,普拉哈,兹普拉希等等。。。
所以我有一个火车数据集,包括
title
和
result
哪里
后果
是二进制的-1或0(大约5000个示例)
您可以在代码注释中看到示例。
我的想法:
-
装载列车数据集(标题、结果)和测试数据集(标题)
-
设定X_火车,y_火车
-
将标题列从X_列转换为数字序列
-
创建模型并设置图层(我不确定我是否做对了)
-
火车
-
测验
Train打印了这个:
Epoch 15/20
- 0s - loss: 0.0303 - acc: 0.9924
Epoch 16/20
- 0s - loss: 0.0304 - acc: 0.9922
Epoch 17/20
- 0s - loss: 0.0648 - acc: 0.9779
Epoch 18/20
- 0s - loss: 0.0589 - acc: 0.9816
Epoch 19/20
- 0s - loss: 0.0494 - acc: 0.9844
Epoch 20/20
但测试返回以下值:
[0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]
这意味着它检测到了这个词
布拉格
在测试csv的这两句话中:
-
西尔维斯特诉杜布利诺·普拉希案
-
布鲁塞卢z普拉希下午518 K
第一个句子是来自一个句子的子串
X_train
第二句等于
X_火车
句子。
我试图增加
epochs
ak号
batch_size
没有成功的数字。。。
其他测试句子是随机或通过修改
X_test
句子。
def train():
# load train dataset
# "TIP! Ukraine Airlines - Thajsko - levné letenky Bangkok z Prahy (a zpÄt) 9.790,- kÄ",1
# PredvianoÄná MALAGA s odletom z Viedne už za 18â¬,0
# S 5* Singapore Airlines z Prahy do Singapuru a pak na Maledivy za 15.940 KÄ,1
# Athény z Katowic Äi Blavy,0
# Z Prahy na kanárský ostrov Tenerife vÄ. zavazadla. Letenky od 1 990 KÄ,1
# Hotel v Praze i na vÃkend za 172KÄ! (i jednolůžkové pokoje),1
dataframe = pandas.read_csv("prague_train_set.csv")
dataframe['title'] = dataframe['title'].str.lower()
dataset = dataframe.values
# load test dataset
# v Praze je super # Should be 1, predicts 0
# Silvestr v Dublinu z Prahy # Should be 1, predicts 1
# do Prahy zavita peter # Should be 1, predicts 0
# toto nie # Should be 0, predicts 0
# xxx # Should be 0, predicts 0
# Praha **** # Should be 1, predicts 0
# z Prahy PÅÃmo # Should be 1, predicts 0
# Tip na dárek: ÅÃm z Prahy za 778KÄ (letfdenky tam i zpÄt) # Should be 1, predicts 0
# lety do BRUSELU z PRAHY od 518 K # Should be 1, predicts 0
# PÅÃmé lety do BRUSELU z PRAHY od 518 KÄ # Should be 1, predicts 1
# Gelachovský stit # Should be 0, predicts 0
tdataframe = pandas.read_csv("prague_test_set.csv")
tdataframe['title'] = tdataframe['title'].str.lower()
tdataset = tdataframe.values
# Preprocess dataset
X_train = dataset[:,0]
X_test = tdataset[:,0]
y_train = dataset[:,1]
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(X_train)
X_train = tokenizer.texts_to_sequences(X_train)
SEQ_MAX_LEN = 200
X_train = sequence.pad_sequences(X_train, maxlen=SEQ_MAX_LEN)
X_test = tokenizer.texts_to_sequences(X_test)
X_test = sequence.pad_sequences(X_test, maxlen=SEQ_MAX_LEN)
# create model
model = Sequential()
# model.add(Embedding(tokenizer.word_index.__len__(), 32, input_length=100))
model.add(Dense(SEQ_MAX_LEN, input_dim=SEQ_MAX_LEN, init='uniform', activation='relu'))
model.add(Dense(10, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X_train, y_train, epochs=20, batch_size=32, verbose=2)
# model.save("trainmodel.h5")
# model = load_model("trainmodel.h5")
# calculate predictions
predictions = model.predict(X_test)
# round predictions
rounded = [round(x[0]) for x in predictions]
print(rounded)
你知道我该怎么做才能让它正常工作吗?