@[TOC]
NIC
图片标题生成器是基于CNN+LSTM的一种神经网络系统,以文献《Show and Tell: A Neural Image Caption Generator》为参考,作者构造了一种叫做NIC(Neural Image Caption)神经网络系统,以CNN提取图片特征,最后一个隐藏层(hidden layer)作为LSTM的输入。LSTM
LSTM(Long Short-term Memory)是一种特殊的RNN(Recurrent Neural Network).
最后达到的效果是对于任意一张图片,可以生成对应的一句话标题。
有关这篇文献的实现在GitHub上有很多,有一些基于MSCOCO数据集,有一些基于Fliker8k或者Flikr39k数据集,MSCOCO数据集的train、valid、test图片都要远多于另外两个。本文我们采用数据集Fliker8k实现。
Coding
这份代码把 train and val 放在一起,由于数据集较小,训练比较容易一点。
config文件用来调整各种参数,由于train总共6000张图片,原始配置是epoch= 20,batch_size = 64,batch_size(批大小)与显存有关,batch_size越大训练速度会加快,但是很耗费显存,batch_size越小会很耗时间。实际情况下我们按自己的需要来确定批大小。
本次我们使用batch_size = 10,所以6000张图片,需要处理600次。
训练完成后,在model_data文件夹下会产生一系列HDF5文件,此时我们可以打开文件,测试最终的效果。
生成的图片和原始图片都在文件夹内。
Beam Search
Beam Search(集束搜索)是一种启发式图搜索算法,通常用在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。这样减少了空间消耗,并提高了时间效率,但缺点就是有可能存在潜在的最佳方案被丢弃,因此Beam Search算法是不完全的,一般用于解空间较大的系统中。
Beam Search 等于1的时候就退化到了贪心算法,在BLEU指标上贪心的Beam Search要比Beam Search = 20时评分低2个BLEU点。
We used the BeamSearch approach in the following experiments, with a beam of size 20. Using a beam size of 1 (i.e.,greedy search) did degrade our results by 2 BLEU points on average.
https://www.cnblogs.com/sddai/p/10552592.html