【发布时间】:2019-09-05 07:04:12
【问题描述】:
尝试构建捕获以下功能的损失函数,一旦遇到“序列结束”,就会屏蔽输出值。
给定一个形状为 [BatchSize,MaxSequenceLenght,OutputNodes] 的张量
考虑下面的例子
batch size = 3
Max Sequence Length=4
OutputNodes = 3
predicted = [[[0.1,0.3,0.2],[0.4,0.6,0.8],[0.5,0.2,0.3],[0.0,0.0,0.99]],
[[0.1,0.3,0.2],[0.4,0.9,0.8],[0.5,0.2,0.9],[0.4,0.6,0.8]],
[[0.1,0.3,0.2],[0.4,0.9,0.8],[0.5,0.2,0.1],[0.4,0.6,0.1]]]
我将最后一个输出节点用于象征此处的“序列结束(EOS)” node=2 。节点标记为 (0, 1 和 2)
根据预测值,我必须返回一个掩码,它试图找到第一次出现的 EOS。
在上面的例子中, 第一行有以下序列 (argmax) => 1,2,0,2
第二行有以下序列 => 1,1,2,2
第三行有以下序列 => 1,1,9,1
所以我的面具应该是
[[1,0,0,0],
[1,1,0,0],
[1,1,1,1]
掩码将确保在计算损失时忽略或不考虑 EOS 后的值。
以下是我尝试过的代码片段
sequence_cluster_asign = keras.backend.argmax(sequence_values,axis=-1)
loss_mask = []
for seq in K.tf.unstack(sequence_cluster_asign):
##appendEOS- To make sure tf.where is not empty
seq = tf.concat([seq,endOfSequenceTensor],axis=0)
endOfSequenceLocation = K.tf.where(K.tf.equal(seq,endOfSequence))[0][0]
loss_mask.append(tf.sequence_mask(endOfSequenceLocation,max_decoder_seq_length,dtype=tf.float32))
final_mask = K.stack(loss_mask)
遇到错误:ValueError: Cannot infer num from shape (?,?)
【问题讨论】:
-
你的
endOfSequenceTensor和max_decoder_seq_length是什么?
标签: tensorflow keras deep-learning unsupervised-learning