我正在尝试制作char-rnn,它预测了与Theano之前角色的下一个角色 .
因此,存在4个值得注意的张量(或矩阵) .
x:输入形状[timelength,inputsize] h:隐藏状态形状[timelength,hiddensize] y:输出形状[timelength,inputsize] t:目标值形状[timelength-1,inputsize]
在这里,目标值张量t明确定义为正式:
t [i,j]:= x [i 1,j]但是如何使用上面的定义定义t?
x = T.matrix(name="x")
t = ? # t[i] := x[i+1] but how to define it in theano?
PS . 我研究了theano的nnet.conv2d,但没有运气
1 回答
原始序列是整数的矢量,编码字符 . 这被转换为一个热门编码,提供输入 . 索引为5的字符的单热编码是一个向量,其中第5个元素为1,其余为零 . 看起来你真的很需要 . 你可以使用原始的整数编码,在这种情况下
t
将是一个向量,而不是一个矩阵 . 长度应该是timelength
,而不是timelength-1
.相应的theano定义是:
您应该使用用于索引的任何整数类型,因为在计算交叉熵损失时,目标将用作输出的索引(
y
) .char-rnn处理序列的连续块 . 假设字符编码整数的原始序列称为
chars
. 序列中的当前位置是p
. 块长度为timelength
. 对于当前块,输入x
包含chars[p : p + timelength]
的单热编码 . 目标t
包含chars[p + 1 : p + timelength + 1]
. 这样,每个目标都比输入提前一步 .原始的char-rnn代码here非常简单 . 它使用numpy而不是theano,以及's written will be slightly different. But, it'对理解概念非常有用的方式 .