2016-06-30 3 views
4

num30 배열을 얻기 위해 eval()을 실행하지 않고 Tensor 반복 가능하게 만드는 방법이 있습니까?반복 실행 Get eerval없이 Tensor

split()을 사용한 후 텐서의 두 부분을 반복하려고하지만 내 신경망의 숨겨진 레이어를 구성 할 때 발생하기 때문에 세션을 시작할 수 있어야합니다.

import tensorflow as tf 
x = tf.placeholder('float', [None, nbits]) 
layer = [x] 
for i in range(1,numbits): 
    layer.append(tf.add(tf.matmul(weights[i-1], layer[i-1]), biases[i-1])) 
    aes, bes = tf.split(1, 2, layer[-1]) 
     if i%2 == 1: 
      for am, a, b in zip(add_layer, aes, bes): 
       layer.append(am.ex(a, b)) 

문제는 layer[-1] 그래서, aes이 시점에서 tf.placeholder하고 bes 모두 텐서 있다는 것입니다, 나는 zip()로 반복 할 수 없다.

모든 아이디어를 얻을 수 있습니다.

+0

@Peter Hawkins, 감사합니다. 나는 Tensorflow 내장품을 파는 것보다 쉬운 방법이 없을 것이라고 두려워했습니다. 내가 마지막으로했던 것은'tf.slice()'를 사용하여 각각의 분할을 개별 요소로 가져 오는 것이 었습니다. 이것은 예상했던 것보다 덜 고통 스러웠습니다. – Vendea

답변

1

아니요, 그렇지 않습니다. 직접적으로.

Tensorflow 프로그램을 두 단계로 나누는 것이 가장 쉽습니다. 계산 그래프를 작성하는 Python 단계를 작성하고 계산 그래프를 실행하는 실행 단계입니다. 실제로 건물 단계에서는 아무 것도 실행되지 않습니다. 모든 계산은 실행 단계에서 발생합니다. 그래프를 실행하는 것 이외에는 실행 단계의 결과에 의존 할 수 없습니다. (session.run(), .eval() 등)

그래프를 작성하는 동안 텐서를 반복 할 수 없습니다. session.run()에 전화 할 때까지 실제로 특정 값 집합으로 평가됩니다. 대신 계산 그래프의 노드에 대한 참조 일뿐입니다.

일반적으로 Tensorflow 기능을 사용하여 Python 기본 요소 (예 : zip)가 아닌 Tensors를 조작해야합니다. 제가 생각하기에 좋아하는 한 가지 방법은 Tensor가 봉인 된 상자에있는 방사성 객체와 거의 비슷하다는 것입니다. 특정 동작 세트 (Tensorflow 라이브러리 함수)를 수행 할 수있는 로봇을 사용하여 간접적으로 만 처리 할 수 ​​있습니다 :-) 따라서 Tensorflow 프리미티브를 사용하여 작업을 표현할 수있는 방법을 찾아야 할 것입니다.

당신이하려는 일에 대한 완전한 예를 들었 으면, 더 많은 것을 말할 수 있습니다 (코드 조각에서 나에게 명확하지 않습니다). 한 가지 가능성은 tf.split을 사용하여 텐서를 파이썬의 서브 센서 목록으로 분리 한 다음 목록에 zip과 같은 것을 사용하는 것입니다.

도움이 되었기를 바랍니다.

관련 문제