美文网首页
Tensorflow2.0 text-cnn 实践练习

Tensorflow2.0 text-cnn 实践练习

作者: 烛之文 | 来源:发表于2019-12-24 20:19 被阅读0次

    1.前 言

    接着上篇,今天主要介绍利用TensorFlow2.0 进行英文文本分类,模型使用基本的CNN框架,后续会对这个框架深入展开。

    2.数据准备


    #引入需要用的包;

    import tensorflow as tf

    from tensorflow.keras import layers

    import matplotlib.pyplot as plt

    #定义一些超参数;

    vocab_size=10000        #词库大小

    seq_length=300          #句子最大长度

    vocab_dim=100          #词的emedding维度

    num_classes=2          #分类类别

    #载入数据,使用TensorFlow自带的imdb英文数据集,训练集有25000,label个数为2(0,1);

    (train_x, train_y), (test_x, test_y)=tf.keras.datasets.imdb.load_data(num_words=vocab_size)

    #数据padding处理;

    train_x = tf.keras.preprocessing.sequence.pad_sequences(train_x, value=0, padding='post',maxlen=seq_length)

    test_x = tf.keras.preprocessing.sequence.pad_sequences(test_x,value=0, padding='post', maxlen=seq_length)

    3.模型构建


    #先构建Embedding层,然后使用256个卷积核,核大小2进行卷积,然后加一个全局最大池化层,接着加一个dropout层,最后加一个softmax分类层;
    model = tf.keras.Sequential()

    model.add(layers.Embedding(vocab_size, vocab_dim))

    model.add(layers.Conv1D(filters=256,kernel_size=2,kernel_initializer='he_normal',

                            strides=1,padding='VALID',activation='relu',name='conv'))

    model.add(layers.GlobalMaxPooling1D())

    model.add(layers.Dropout(rate=0.5,name='dropout'))

    model.add(layers.Dense(num_classes,activation='softmax'))

    print(model.summary())

    模型概况

    4.模型编译和训练


    #使用稀疏性的多分类损失(label不用one_hot的形式),优化方法使用Adam,评价方法是accuracy;

    model.compile(loss='sparse_categorical_crossentropy',optimizer=tf.keras.optimizers.Adam(),metrics=['accuracy'])

    #训练8轮,batch_size为128,训练集中10%作为验证集,训练结果如下图,在验证集上最好的结果为98.96%;

    history=model.fit(train_x,train_y,epochs=8,batch_size=128,verbose=1,validation_split=0.1)

    训练结果

    #图示化训练和验证准确率变化

    plt.plot(history.history['acc'])

    plt.plot(history.history['val_acc'])

    plt.legend(['training', 'valiation'], loc='upper left')

    plt.show()

    训练集准确率和验证集准确率变化

    5.结 语


    训练中发现,验证集上的准确率呈现一直下降趋势,而训练集一直上升,表明有点过拟合;另外验证集取得最好结果在第一次epoch,表明可能学习率过大,每轮decay下会更好些。此外,因为这个数据集特征比较明显,随便一个模型就能跑出很好的效果,接来下会找一个有一定挑战的中文数据集进行实践。

    相关文章

      网友评论

          本文标题:Tensorflow2.0 text-cnn 实践练习

          本文链接:https://www.haomeiwen.com/subject/acgfoctx.html