0

Ich habe dieses RNN Textklassifizierungssystem in Keras mit den im Web verfügbaren Tutorien geschrieben. es funktioniert gut und zeigt auch die Ausgabe. Aber kann jemand meinen Code überprüfen und mir sagen, ob meine Implementierung korrekt ist oder nicht?RNN Textklassifizierung mit Keras

# 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) 
+0

Versuchen https://codereview.stackexchange.com/ – jcubic

+1

Ich stimme für das Schließen dieser Frage als Off-Topic ab, da sie zu codereview.stackexchange.com gehört – jcubic

Antwort

1

Ihre Implementierung ist gut, aber die Funktion "show_accuracy = True" ist veraltet. Wenn Sie die Genauigkeit während des Trainings und Tests überwachen möchten, verwenden Sie diese bitte als Messwert. Metriken können benutzerdefiniert sein, einige von ihnen, wie die Genauigkeit, werden jedoch vorimplementiert. Verwenden Sie es wie thise:

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

, wenn Sie eine custum Metrik definieren:

def my_metric(y_pred, y_true): 
    .... 
    return metric_computed 

Sie es so verwenden können, und es wird wie die Genauigkeit (und den Verlust standardmäßig in der gleichen Zeit berechnet werden während des Trainings):

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

Ansonsten ist die Umsetzung gut scheint :)

Verwandte Themen