【发布时间】:2016-03-25 21:59:22
【问题描述】:
我正在尝试使用 seq2seq 来实现从解码器生成采样输出的功能,即在每一步,而不是从先前状态中获取输出 logits 的 argmax,它应该根据 logit 分布从它们中采样并使用作为下一步的输入。
四处寻找之后,我发现 seq2seq.py 中的 loop_function 是一个很有希望的起点。看起来我必须编写一个看起来像这样的循环函数(从文件中提取argmax+embedding的那个修改):
def _extract_sample_and_embed(embedding, output_projection=None,
update_embedding=True):
def loop_function(prev, _):
if output_projection is not None:
prev = nn_ops.xw_plus_b(prev, output_projection[0], output_projection[1])
prev_symbol = math_ops.sample(prev) #<------- Need this op but it does not exist ?
emb_prev = embedding_ops.embedding_lookup(embedding, prev_symbol)
if not update_embedding:
emb_prev = array_ops.stop_gradient(emb_prev)
return emb_prev
return loop_function
然后我在 seq2seq_embedding_with_attention 模型中使用这个循环函数生成器。但是,我需要从浮点张量中采样的操作在张量流中不存在,所以我需要自己编写吗?我该怎么做?
-
在寻找指导的过程中,我发现在tensorflow/tensorflow/python/ops/candidate_sampling_ops中有一个参考:
from tensorflow.python.ops import gen_candidate_sampling_ops但是我找不到这个文件。我猜它是从某个地方自动生成的。在哪里?
【问题讨论】:
标签: python tensorflow deep-learning