image caption(四)文章及代码的一些解析

show and tell是直接调用的LSTM

https://www.cnblogs.com/wangduo/p/6773601.html?utm_source=itdadao&utm_medium=referral

 

1.LSTM网络

LSTM网络包括的结构为:

输入:x_{t}h_{t-1}

输出:h_{t}

其他:由四个主要的门组成

第一步:

  • 决定从细胞状态中丢弃什么信息,这个过程由忘记门完成。输出为0-1之间的数值,1表示“完全保留”,0表示“完全舍弃”
  • f_{t}

  • f_{t}=\sigma (W_{f}\cdot [h_{t-1},x_{t}]+b_{f})

第二步:

  • 确定什么样的新信息被存放在细胞状态中。sigmoid层称“输入门层”决定什么值将要更新。tanh层创建一个新的候选值向量,会被加入到状态中。
  • i_{t}\widetilde{C}

  • \widetilde{C}=\tanh (W_{C}\cdot [h_t-1,x_t]+b_{C})

第三步:

  • 更新旧细胞状态,将C_{t-1}更新为C_{t}
  • C_{t}

  • C_{t}=C_{t-1}\ast f_t + i_{t}\ast \widetilde{C_{t}}

第四步:

  • 确定要输出的值
  • o_{t}h_{t}

  • o_{t}=\sigma (W_{o}[h_{t-1},x_{t}]+b_o)
  • h_{t}=o_{t}\ast \tanh (C_{t})

2.show and tell

我理解的这篇文章算是encoder decoder中,运用CNN编码,RNN解码的鼻祖,github上有代码,neraultalk2和im2txt。

我研究的是im2txt代码。

在论文中,编码部分是将图片输入到CNN(比如InceptionV3)的卷积层最后一层,得到image_embedding的数据,将输入和voab对比,生成seq_embedding数据。

在训练阶段,将image_embedding当作初始状态输入进lstm中,之后依次输入seq_embedding,通过dynamic_rnn训练,最后得到output。其中loss是由总的loss和batch的loss求和得到的。

在inference也就是测试阶段,直接将数据输入到lstm中,得到output。

本文用的是原始的lstm框架,所以额外需要理解的就是输入输出空间大小问题了。

3.show attend and tell

本文相比于上篇,主要有以下不一样的地方:

  • 编码器不是CNN的最后一层,而是更前面的层,因为需要空间特征,比如vgg19的conv5_3
  • 增加了两个attention特征。一个是根据输入的图像feature特征和隐层数据推导出来的,将比例与原图像feature特征相乘,得到新的输入特征;另一个是加了一个随机beta特征
  • loss的计算方式,加上了上面一项求和为1的项
  • 并且多加了几个感知机的层

分析几个变量和结构:

1.初始化

主要有c和h的初始变量,初始化方法为c,h=f(W\ast feature+b),f(W\ast feature+b)

2.attention 层

将图像feature和h与隐层w的积相加,得到一个h,和另一个隐层w相乘,得到e_{ti},通过softmax得到\alpha\alpha和feature求积累加得到context

3.beta层(第二个attention层)

beta只有一个感知机层,得到的beta与context相乘

最终得到模型

 

 

 

 

 

 

 

参考:

https://blog.csdn.net/shenxiaolu1984/article/details/51493673

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值