在theano中对张量的正式定义

时间:2016-07-05 05:41:54

标签: python machine-learning neural-network theano recurrent-neural-network

我正在尝试制作一个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?

<div class="panel panel-default">
  <div class="panel-body">
    <div class="btn-toolbar">
      <button class="btn btn-default" data-toggle="collapse" data-target="#collapse-select2" aria-expanded="false">Toggle</button>
    </div>
    <div class="collapse" id="collapse-select2">
      <select class="form-control" data-role="select2">
        <option value="1">Option #1</option>
        <option value="2">Option #2</option>
        <option value="3">Option #3</option>
      </select>
    </div>
  </div>
</div>

PS。我研究了theano的nnet.conv2d,但没有运气

1 个答案:

答案 0 :(得分:0)

原始序列是整数,编码字符的向量。这将转换为一个热门编码,提供输入。索引为5的字符的单热编码是一个向量,其中第5个元素为1,其余为零。看起来您正在设置目标以使用单热编码。这可以做到,但并非真的有必要。您可以使用原始整数编码,在这种情况下,t将是向量,而不是矩阵。长度应为timelength,而不是timelength-1

相应的theano定义是:

t = ivector(name="t") # for 32-bit integer
t = lvector(name="t") # for 64-bit integer

您应该使用用于索引的任何整数类型,因为在计算交叉熵损失时,目标将用作输出(y)的索引。

char-rnn处理序列的连续块。假设字符编码整数的原始序列称为chars。序列中的当前位置是p。块长度为timelength。对于当前块,输入x包含chars[p : p + timelength]的单热编码。目标t包含chars[p + 1 : p + timelength + 1]。这样,每个目标都比输入提前一步。

原始字符代码here非常简单。它使用numpy而不是theano,它的编写方式会略有不同。但是,它对于理解这些概念非常有用。