原始模型优化笔记

对于原始弹幕分类CNN模型进行优化。

修改 word2vec model 的 vector size

  • 400: Nice at epoch 38, validation acc 96.56%
  • 200: Nice at epoch 37, validation acc 95.22%
  • 100: Nice at epoch 34, validation acc 94.78% 单轮训练时间与50维相近,测试样例测试耗时 0.92secs
  • 50: Nice at epoch 40, validation acc 94.39% 单轮训练时间在7秒左右,测试样例(av 8365806)测试耗时 0.7secs

尝试加入dropout

在两个 conv 层之间和两个 fc 层之间各加入了一个 \(p=0.5\) 的 dropout

40 epoch 时只有 89.1 acc, 和预想的一样,会导致 达到最佳效果的 epoch 数上升。

用了 dropout 后一个很明显的变化是,原本训练过程中通常是train acc 高于 validation acc,现在通常是 validation acc 高于 train acc,训练后期才基本持平或反超

vector在 epoch 90 左右 达到了96.50%上下的 acc,最终在epoch 300 以上能达到 97.10% 左右的 acc

屏幕快照 2017-02-24 22.15.27

Read more   2017/3/1 17:4 下午 posted in  Deep Learning

低素质弹幕分类器的CNN实现

整体架构

对于一条弹幕,首先进行分词,然后通过 word2vec 转换为词向量,再填充至固定长度,作为卷积神经网络的输入。

卷积神经网络的结构如下:

model = Sequential()
model.add(Convolution1D(100, 4, border_mode='valid', input_shape=(100, word_model.vector_size)))
model.add(Activation('relu'))
model.add(Convolution1D(100, 4, border_mode='valid', input_shape=(100, word_model.vector_size)))
model.add(Activation('relu'))
model.add(Flatten()) 
model.add(Dense(100, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy']
             )

最终输出为2位的 categorical result,直接使用第一项,即骂人弹幕的概率作为输出。

然后通过代理,在弹幕服务器与播放器之间插入一层,实现弹幕的分类与屏蔽。最终实现了有效的骂人弹幕自动屏蔽,但是误伤的情况依然存在。

搭建过程

Read more   2017/2/6 14:48 下午 posted in  Deep Learning

低素质弹幕分类器 CNN 训练笔记

一开始使用这个结构,迭代10次。

model = Sequential()
model.add(Convolution1D(100, 4, border_mode='valid', input_shape=(100, word_model.vector_size)))
model.add(Activation('relu'))
model.add(Convolution1D(5, 4, border_mode='valid'))
model.add(Activation('relu'))
model.add(Flatten()) 
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy']
             )

完成训练后,乍一看准确率很高,结果 print 出来看一下,低素质弹幕完全没有被过滤,完全是将分类全部丢给 positive 达到的高准确率 (0.98) 的确是 meaningless classification
并且这个结果在loss里看得很清楚,loss一直是处于15+的

Read more   2017/2/6 14:48 下午 posted in  Deep Learning