簡體   English   中英

如何在張量流中擴大矩陣而不重復值?

[英]How to enlarge a matrix in tensorflow without duplicating values?

我想做的是為我的神經網絡建立一個權重矩陣,該矩陣的大小會不斷增長(即,每次迭代都會向其中添加一個神經元)。 但是,我不想再次使用tf.Variable ,因為這將通過復制前一個矩陣中的值而不擴展矩陣本身來浪費內存。

我已經看到人們使用tf.assign並將validate_shape設置為False,但是,這不會正確更改變量的形狀,我認為這是一個錯誤,但是tensorflow GitHub似乎不同意(我不明白為什么從他們的回復 )。

下面是問題的簡化示例。 x是我要擴展的矩陣,以便可以將其添加到z。 如果有人知道我要在這里實現的解決方案,我將不勝感激=)

import tensorflow as tf
import numpy as np

# Initialise some variables
sess = tf.Session()
x = tf.Variable(tf.truncated_normal([2, 4], stddev = 0.04))
z = tf.Variable(tf.truncated_normal([3, 4], stddev = 0.04))
sess.run(tf.variables_initializer([x, z]))

# Enlarge the matrix by assigning it a new set of values
sess.run(tf.assign(x, tf.concat((x, tf.cast(tf.truncated_normal([1, 4], stddev = 0.04), tf.float32)), 0), validate_shape=False))

# Print shapes of matrices, notice that x's actual shape is different for the
# shape tensorflow has recorded for it
print(x.get_shape())
print(x.eval(session=sess).shape)
print(z.get_shape())
print(z.eval(session=sess).shape)

# Add two matrices with equal shapes
print(tf.add(x, z).eval(session=sess))

注意:我意識到,如果我將z初始化為形狀(2,4),然后使用tf.assign擴展它(就像我對x所做的那樣),則上面的示例將起作用。 但是由於另一個限制,我無法控制z的原始形狀。

張量流中的張量是不可變的,因此您無法輕松地重新縮放它們。

您可以嘗試填充0,然后使用tf.gather()訪問矩陣的部分,如下所示: 如何從TensorFlow中的3-D Tensor中選擇行?

在較大的填充矩陣中實現“子矩陣”。 但是,這似乎不是一個簡單或優雅的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM