Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于keras的RNN文本分类_Python_Python 2.7_Neural Network_Keras_Recurrent Neural Network - Fatal编程技术网

Python 基于keras的RNN文本分类

Python 基于keras的RNN文本分类,python,python-2.7,neural-network,keras,recurrent-neural-network,Python,Python 2.7,Neural Network,Keras,Recurrent Neural Network,我在keras中编写了这个RNN文本分类系统,并提供了web上的教程。它工作正常,并显示输出。但是有人能检查我的代码并告诉我我的实现是否正确吗 # LSTM with dropout for sequence classification import numpy from keras.models import Sequential from keras.layers import Dense, Activation from keras.layers import LSTM from ke

我在keras中编写了这个RNN文本分类系统,并提供了web上的教程。它工作正常,并显示输出。但是有人能检查我的代码并告诉我我的实现是否正确吗

# LSTM with dropout for sequence classification 
import numpy
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.layers import LSTM
from keras.preprocessing import sequence,text
from keras.layers.embeddings import Embedding
import pandas as pd


# fix random seed for reproducibility
numpy.random.seed(7)

#fetching sms spam dataset
url = 'https://raw.githubusercontent.com/justmarkham/pydata-dc-2016-tutorial/master/sms.tsv'
sms = pd.read_table(url, header=None, names=['label', 'message'])

#binarizing
sms['label_num'] = sms.label.map({'ham':0, 'spam':1})
sms.head()

X = sms.message
y = sms.label_num
print(X.shape)
print(y.shape)

###################################
tk = text.Tokenizer(nb_words=200, lower=True)
tk.fit_on_texts(X)

x = tk.texts_to_sequences(X)

print len(tk.word_counts)

###################################
max_len = 80
print "max_len ", max_len
print('Pad sequences (samples x time)')

x = sequence.pad_sequences(x, maxlen=max_len)



max_features = 200
model = Sequential()
print('Build model...')

model = Sequential()
model.add(Embedding(max_features, 128, input_length=max_len, dropout=0.2))
model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='rmsprop')

model.fit(x, y=y, batch_size=500, nb_epoch=1, verbose=1, validation_split=0.2, show_accuracy=True, shuffle=True)

您的实现很好,但是不推荐使用show_accurity=True功能。如果您想在培训和测试期间监控精度,请将其用作度量。指标可以自定义,但其中一些指标(如准确性)是预先实现的。像这样使用它:

model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
如果定义客户度量,请执行以下操作:

def my_metric(y_pred, y_true):
    ....
    return metric_computed
您可以这样使用它,它将与训练期间默认的精度和损失同时计算:

model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy',my_metric])

否则,实现似乎很好:

请尝试我投票结束这个问题,因为它属于codereview.stackexchange.com。如何确定最大功能、输入长度以及什么是128?