我觉得这很尴尬,但你如何在张量内调整单个值?假设你想在张量中只有一个值加'1'?
通过索引编写它不起作用:
TypeError: 'Tensor' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
一种方法是建立一个相同形状的0张量.然后在您想要的位置调整1.然后你将两个张量加在一起.这又遇到了和以前一样的问题.
我已多次阅读API文档,似乎无法弄清楚如何执行此操作.提前致谢!
最近,我一直试图找到最接近嵌入的词.这两种最显着的方法是通过余弦距离或欧氏距离.
我试图找到如何有效地计算张量形状的余弦距离 [batch_size x embedding_size]
一种方法是解压缩张量并计算余弦距离
#embedding is shape [vocab_size x embedding size]
array_list = tf.unpack(batch_array)
word_class_list = tf.unpack(embedding)
index_list_of_closest_word = []
for eacharray in array_list:
list_of_distances = []
for eachwordclass in word_class_list:
list_of_distances.append(cosine_distance(eacharray, eachwordclass))
index_list_of_closest_word.append(tf.argmax(tf.pack(list_of_distances)))
Run Code Online (Sandbox Code Playgroud)
但是,这种方法非常低效.是否有更有效的方式来做到这一点?我知道word2vec做得非常快,并且具有gpu功能的tensorflow应该能够并行执行这些批量计算.
谢谢!
我试图找出在两个GPU之间均匀分配seq2seq网络的内存负载的最具战略性的方法.
使用卷积网络,任务更容易.但是,我正在试图弄清楚如何最大化2 Titan X的内存使用量.目标是构建最大的24GB内存允许的网络.
一个想法是将每个RNN层放在单独的GPU中.
GPU1 --> RNN Layer 1 & Backward Pass
GPU2 --> RNN Layer 2,3,4
Run Code Online (Sandbox Code Playgroud)
但是,backprop计算需要大量内存.因此,另一个想法是在一个GPU上进行整个前向传递,在单独的GPU上进行后向传递.
GPU1 --> Forward Pass
GPU2 --> Backward Pass
Run Code Online (Sandbox Code Playgroud)
(但是,GPU2仍占用大部分内存负载)
有没有办法测量使用了多少GPU内存?这将使我们能够弄清楚如何在每个GPU"填满"之前最大化它们.
一旦使用了2个GPU,我最终会想要使用4个GPU.但是,我认为最大化2个GPU是第一步.
memory gpu out-of-memory tensorflow recurrent-neural-network
的tf.logical_or,tf.logical_and和tf.select功能是非常有用的.
但是,假设你有价值x,并且你想看看它是否在set(a, b, c, d, e).在python中你只需写:
if x in set([a, b, c, d, e]):
# Do some action.
Run Code Online (Sandbox Code Playgroud)
据我所知,在TensorFlow中执行此操作的唯一方法是嵌套'tf.logical_or'和'tf.equal'.我在下面提供了这个概念的一次迭代:
tf.logical_or(
tf.logical_or(tf.equal(x, a), tf.equal(x, b)),
tf.logical_or(tf.equal(x, c), tf.equal(x, d))
)
Run Code Online (Sandbox Code Playgroud)
我觉得在TensorFlow中必须有一种更简单的方法.在那儿?