지금까지 내가 당신이 정말로 (데이터 자체에 대한 액세스 권한을 얻을 수 없습니다 알고 즉, 포인터처럼). 그 이유는 코드가 데이터에 무관 할 것이기 때문에 해당 부분에 대해 걱정하지 않고도 다른 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