Thensorflow: 双向lstm用于情感分类源码解析

import tflearn
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.embedding_ops import embedding
from tflearn.layers.recurrent import bidirectional_rnn, BasicLSTMCell
from tflearn.layers.estimator import regression

数据集的处理包括数据集的加载、标签转化

数据集的加载:

# IMDB Dataset loading
train, test, _ = imdb.load_data(path='imdb.pkl', n_words=10000,
                               valid_portion=0.1)
"""
valid_portion用于验证集占整个数据集的比例。
load_data返回数据train, valid, test
"""
trainX, trainY = train
testX, testY = test

数据集处理:对于不等长的序列的处理(填充和截断)调用pad_sequences方法

# Sequence padding
trainX = pad_sequences(trainX, maxlen=200, value=0.)
testX = pad_sequences(testX, maxlen=200, value=0.)
"""
pad_sequences
将每个序列填充到相同的长度:最长序列的长度。如果提供了maxlen,
则长度超过maxlen的任何序列都将被截断为maxlen。
截断发生在序列的开始处或结束处(缺省值)。
支持预填充和后填充(默认)。
"""

数据集转化,使用util包中的to_categorical方法 

# Converting labels to binary vectors
trainY = to_categorical(trainY)
testY = to_categorical(testY)

传说中的one-hot编码

def to_categorical(y, nb_classes):
    """ to_categorical.

    Convert class vector (integers from 0 to nb_classes)
    to binary class matrix, for use with categorical_crossentropy.

    Arguments:
        y: `array`. Class vector to convert.
        nb_classes: `int`. Total number of classes.

    """
    y = np.asarray(y, dtype='int32')
    if not nb_classes:
        nb_classes = np.max(y)+1
    Y = np.zeros((len(y), nb_classes))
    Y[np.arange(len(y)),y] = 1.
    return Y
# Network building
net = input_data(shape=[None, 200])
net = embedding(net, input_dim=20000, output_dim=128)#为整数id或浮点数序列嵌入层。
net = bidirectional_rnn(net, BasicLSTMCell(128), BasicLSTMCell(128))
"""
建立一个双向递归神经网络,需要2个RNN细胞对序列进行正向和逆向处理。
任何RNN单元都可以使用,如SimpleRNN、LSTM、GRU等。
有自己的参数。但是两个单元格的单位数必须匹配。
"""
net = dropout(net, 0.5)
net = fully_connected(net, 2, activation='softmax')
net = regression(net, optimizer='adam', loss='categorical_crossentropy')
"""
TFLearn中使用回归层来对提供的输入应用回归(linear or logistic)。
它需要指定一个TensorFlow梯度下降优化器“优化器”,该优化器将最小化提供的损失函数“损失”(计算错误)。
还可以提供一个度量标准来评估模型性能。
"""
# Training
model = tflearn.DNN(net, clip_gradients=0., tensorboard_verbose=2)
model.fit(trainX, trainY, validation_set=0.1, show_metric=True, batch_size=64)

 

你可能感兴趣的:(tensorflow)