对作业进行一些形象的解释
首先是def rnn_step_forward:
这里的t时刻其实就是一个句子里面的单词数,为了方便会统一到一个最长长度,对于比这个长度短的部分用null进行填充,并且在方法内部会让Null不进行传播和梯度计算。
我们最终要的是h(shape是(N,T,H)),最终的h经过一系列后处理会得到新的句子
然后是def rnn_forward:
把rnn_step_forward循环T次 (就得到模型产生的新句子了)
然后是train的forward,写在class Captioning RNN中的loss函数中:
这里的emb_caption 是由groundtruth的句子中的单词得来的emb,而在test中,除了第一个emb_caption是groundtruth以外,之后的每一步的emb_caption都是由上一步得到的next_h进行转换得到的。
test部分(写在class CaptioningSolver的sample中):
最终的captions就是测试集所得到的新句子