2016-07-14 3 views
1

는 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.

의 각 열
+0

실제로 테스트 해 보셨습니까? 제 추측은 슬라이스가 완전히 다른 객체가 아니라 원래의 텐서의 뷰라는 것입니다. –

+0

이제 저는 그것이 단지 텐서지만 변수가 아니라고 생각합니다. – xxx222

답변

1

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

내가하려는 것은 비용 함수를 작성하는 것입니다. 비용 함수를 최소화함으로써 C의 최적화 된 값을 얻을 수 있습니다. 여기에 게시 된 질문과 마찬가지로 http://stackoverflow.com/questions/38376473/how-do- i-implement-the-optimization-function-in-tensorflow – xxx222

+0

이것이 당신이 원하는 것의 더 좋은 예인 지 알려주십시오. – Steven