1. 程式人生 > >tensorflow(二)文字分類

tensorflow(二)文字分類

文字分類是自然語言處理中的一個重要領域。在神經網路未興起之前,svm在分類方面獨領風騷。j即使在現在,svm在很多場景下也很有用。但是神經網路提高了準確率,使其迅速火了起來。下面是tensorflow官網給出的例子(https://tensorflow.google.cn/tutorials/keras/basic_text_classification)

import tensorflow as tf
from tensorflow import keras
import numpy as np

#1.下載資料
imdb=keras.datasets.imdb
#num_words=10000表示保留前10000個出現頻率最高的詞,頻率在此之後的可能被丟棄
(train_data,train_labels),(test_data,test_labels)=imdb.load_data(num_words=10000) print("Training entries:{},labels:{}".format(len(train_data),len(train_labels)))\ #每行是一個數字陣列,類似於1, 14, 22, 16, 43, 530, 973]其中每個數字代表唯一的一個詞 print(train_data[0]) #由於每個評論的長度長短都不一樣,所以陣列的長度也不一樣 print(str(len(train_data[0]))+"/"+str
(len(train_data[1]))) #2.轉換資料 #由於網路的輸入的維數是固定的,因此需要將陣列轉化為統一的長度 word_index=imdb.get_word_index() # The first indices are reserved word_index = {k:(v+3) for k,v in word_index.items()} word_index["<PAD>"] = 0 word_index["<START>"] = 1 word_index["<UNK>"] = 2 # unknown word_index["<UNUSED>"
] = 3 #train_data代表要處理的資料,value代表要用什麼資料填充,這裡是0,padding代表在前還是在後填充,pre代表前,post代表後. # maxlen代表最大長度,超過該長度將會被截斷 train_data = keras.preprocessing.sequence.pad_sequences(train_data, value=word_index["<PAD>"], padding='post', maxlen=256) test_data = keras.preprocessing.sequence.pad_sequences(test_data, value=word_index["<PAD>"], padding='post', maxlen=256) #3.build model vocab_size=10000 model=keras.Sequential() model.add(keras.layers.Embedding(vocab_size,16)) model.add(keras.layers.GlobalAveragePooling1D()) model.add(keras.layers.Dense(16,activation=tf.nn.relu)) model.add(keras.layers.Dense(1,activation=tf.nn.sigmoid)) model.summary() model.compile(optimizer=tf.train.AdamOptimizer(), loss="binary_crossentropy") #4.建立校驗集 x_val=train_data[:10000] partial_x_train=train_data[10000:] y_val=train_labels[:10000] partial_y_train=train_labels[10000:] model.fit( partial_x_train, partial_y_train, epochs=40, batch_size=512, validation_data=(x_val,y_val), verbose=1 ) results=model.evaluate(test_data,test_labels) print(results)