本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

wzatv:【j2开奖】seq2seq理论研究和在量化上的延伸系列一(思路+代码)(3)

时间:2017-05-13 03:35来源:668论坛 作者:j2开奖直播 点击:
在这一点上,decode_cell输出是每个时间步长的一个hidden_units大小的向量。 然而,对于训练和预测,我们需要大小为vocab_size的logits。 合理的事情是将线性层

在这一点上,decode_cell输出是每个时间步长的一个hidden_units大小的向量。 然而,对于训练和预测,我们需要大小为vocab_size的logits。 合理的事情是将线性层(没有激活功能的完全连接层)放在LSTM输出的顶部,以获得非归一化的逻辑。 这个层被称为投影层。

  decoder_logits = tf.contrib.layers.linear(decoder_outputs, vocab_size)decoder_prediction = tf.argmax(decoder_logits, 2)

优化

  decoder_logits

  <tf.Tensor 'fully_connected/Reshape_1:0' shape=(?, ?, 10) dtype=float32>

RNN输出形状为[max_time,batch_size,hidden_units]的张量,其中投影层映射到[max_time,batch_size,vocab_size]。 vocab_size部分是静态的,而max_time和batch_size是动态的。

  stepwise_cross_entropy = tf.nn.softmax_cross_entropy_with_logits( labels=tf.one_hot(decoder_targets, depth=vocab_size, dtype=tf.float32), logits=decoder_logits,)loss = tf.reduce_mean(stepwise_cross_entropy)train_op = tf.train.AdamOptimizer().minimize(loss)sess.run(tf.global_variables_initializer())

测试

当构建图形时,当静态形状不匹配时,TF将抛出错误。 但是,当我们尝试通过图形运行某些东西时,往往只会发现动态形状之间的不匹配。

所以让我们尝试运行一些东西。 为此,我们需要准备一些数据,我们将会投入到占位符中。

- 编码器形状如何固定为最大

- 解码器形状如何由输入进行仲裁和确定,但编码器应该可能会更长

- 如何解码器输入值也是仲裁的,以及我们如何使用指令,以及这些0是什么,可以使用什么(移位Gold序列,波束搜索)

  batch_ = [[ 6], [ 3, 4], [ 9, 8, 7]]batch_, batch_length_ = helpers.batch(batch_)print( 'batch_encoded:n'+ str(batch_))din_, dlen_ = helpers.batch(np.ones(shape=( 3, 1), dtype=np.int32), max_sequence_length= 4)print( 'decoder inputs:n'+ str(din_))pred_ = sess.run(decoder_prediction, feed_dict={ encoder_inputs: batch_, decoder_inputs: din_, })print( 'decoder predictions:n'+ str(pred_))

  batch_encoded:[[6 3 9] [0 4 8] [0 0 7]]decoder inputs:[[1 1 1] [0 0 0] [0 0 0] [0 0 0]]decoder predictions:[[9 3 9] [9 0 9] [0 0 0] [0 0 0]]

  toy task

我们将教我们的模型记忆和再现输入序列。 序列将是随机的,具有不同的长度。

由于随机序列不包含任何结构,模型将无法利用数据中的任何模式。 它将简单地在思维向量中编码序列,然后从中解码。

  batch_size = 100batches = helpers.random_sequences(length_from= 3, length_to= 8,vocab_lower= 2, vocab_upper= 10,batch_size=batch_size)print( 'head of the batch:')

  forseq innext(batches)[: 10]: print(seq) head of the batch:[7, 2, 4, 5, 7, 6][5, 4, 8, 2, 9, 8, 2][3, 6, 9, 4, 4, 7][8, 8, 6, 7, 4][5, 8, 5, 9, 2, 8, 8, 5][9, 4, 6][2, 8, 6, 8, 4, 4, 6][8, 6, 2][6, 3, 9, 4][5, 4, 4]defnext_feed():batch = next(batches) encoder_inputs_, _ = helpers.batch(batch) decoder_targets_, _ = helpers.batch( [(sequence) + [EOS] forsequence inbatch] ) decoder_inputs_, _ = helpers.batch( [[EOS] + (sequence) forsequence inbatch] ) return{ encoder_inputs: encoder_inputs_, decoder_inputs: decoder_inputs_, decoder_targets: decoder_targets_, }

给定encoder_inputs [5,6,7],decode_target将为[5,6,7,1],其中1为EOS,decode_inputs为[1,5,6,7] - decode_inputs滞后1步, 将以前的指令作为当前步骤的输入。

  loss_track = []max_batches = 3001

  batches_in_epoch = 1000

  try:

  forbatch inrange(max_batches): fd = next_feed() _, l = sess.run([train_op, loss], fd) loss_track.append(l)

  ifbatch == 0orbatch % batches_in_epoch == 0: print( 'batch {}'.format(batch)) print( ' minibatch loss: {}'.format(sess.run(loss, fd))) predict_ = sess.run(decoder_prediction, fd) fori, (inp, pred) inenumerate(zip(fd[encoder_inputs].T, predict_.T)): print( ' sample {}:'.format(i + 1)) print( ' input > {}'.format(inp)) print( ' predicted > {}'.format(pred))

  ifi >= 2:

  breakprint()

  exceptKeyboardInterrupt: print( 'training interrupted')

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容