說在tensorflow,我創建了由我可以得到張量張量中的一部分的指針嗎?
C = tf.Variable(tf.random_uniform([n_sample, n_sample], -1, 1), name='C')
一個變量,
現在我希望得到一個指針變量的第一列,反正是有我能做到這一點? tf.slice(C, [0,0], [n_sample,1])
會給我我想要的,或者它會創建另一個變量,其值存儲在C
中。
,我想這樣做是因爲我的優化功能取決於兩個C對原因和C.
的每列說在tensorflow,我創建了由我可以得到張量張量中的一部分的指針嗎?
C = tf.Variable(tf.random_uniform([n_sample, n_sample], -1, 1), name='C')
一個變量,
現在我希望得到一個指針變量的第一列,反正是有我能做到這一點? tf.slice(C, [0,0], [n_sample,1])
會給我我想要的,或者它會創建另一個變量,其值存儲在C
中。
,我想這樣做是因爲我的優化功能取決於兩個C對原因和C.
的每列據我知道你不能真正得到訪問數據本身(即像一個指針)。原因在於代碼將與數據無關,因此它可以將數據傳遞到不同的CPU或GPU,而無需擔心該部分(或者您可以指定要使用的設備,但這會變得繁瑣)。
所以tf.slice將是正確的功能使用。
你可以這樣做:
for i in range(n_sample):
curr_slice = tf.slice(C, [i,0], [n_sample,1])
do_something(curr_slice)
這是不是最有效的版本,但它是你問在註釋。
for i inVectorized range(n_sample):approach
curr_sliceloss = tf.slice(C, [i,0], [n_sample,1])
y.assign_add(tf.nn.l2_loss(tf.sub(curr_slice,X - tf.matmul(X,curr_slice)C)) + lambdalamb * tf.nn.l2_loss(curr_slice) C)
loss=tf.reduce_sum(y)
矢量化方法更清潔:
loss = tf.nn.l2_loss(X - tf.matmul(X,C)) + lamb * tf.nn.l2_loss(C)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
sess.run(train_step)
您可能需要通過創建佔位符來初始化一些值。 另外我還沒找到它在skflow中,但在scikit學習它是一個簡單的3班輪。
from sklearn.linear_model import Ridge
clf = Ridge(alpha=1.0)
clf.fit(X, W)
你真的試過自己測試過嗎?我的猜測是,切片是原始張量的視圖,而不是完全不同的對象。 –
現在我認爲它只是一個張量而不是變量。 – xxx222