の各列の両方に依存しているので、私はそれをしたい理由は、私の知る限り、あなたが本当にデータ自体(すなわちへのアクセスを得ることができない知っているようですポインタのように)。その理由は、コードがデータに依存しないため、その部分について心配することなく、異なる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