2016-10-21 3 views
0

저는 프로그래밍에 초보자입니다. 특히 tensorflow로 프로그래밍하는 것이 좋습니다. 나는 그것을 사용하는 것을 이해하기 위해 장난감 문제를 만들고있다. 그런 경우 나는 분모가 모든 클래스의 합이 아닌 샘플 된 클래스의 합계 인 softmax와 같은 함수를 만들고 싶습니다.tensorflow로 함수 구현하기

def my_softmax(X,W, num_of_samples): 
    K = 4 
    S = np.zeros(((np.dot(X,np.transpose(W))).shape)) 
    for line in range(X.shape[0]): 
     XW = np.dot(X[line],np.transpose(W)) 
     m = np.max(XW) 
     samples_sum = 0 
     for s in range(num_of_samples): 
      r = (randint(0,K-1)) 
      samples_sum += np.exp(XW[r]- m) 

     S[line] = (np.exp(XW-m))/(samples_sum) 

    return S 

이이 tensorflow에서 구현 될 수있는 방법 : 같은 NumPy와는 것 사용하여 파이썬에서

? 더 일반적으로 새로운 "사용자 지정"기능을 만들 수있는 방법이 있습니까?

답변

0

파이썬/numpy 함수를 tensorflow 연산자로 래핑 할 수 있습니다. tf.py_func를 참조하십시오. https://www.tensorflow.org/versions/r0.9/api_docs/python/script_ops.html

그러나 성능에 (현저한) 영향이 있으므로 프로덕션 환경에서는 사용하지 않는 것이 좋습니다. 대부분의 np. * 함수는 사용할 수있는 tf. * 함수를 찾을 수 있습니다. 루프 대신에 행렬/벡터의 관점에서 모든 계산을 표현하십시오.

는 또한 응답 https://www.tensorflow.org/versions/r0.11/api_docs/python/constant_op.html

+0

감사를 참조하십시오. 나는 당신이 옳다고 생각하고 대신에 for 루프를 코딩하는 matrix/vector를 시도해야하지만, 프로그래밍에 익숙하지 않기 때문에 그렇게하는 방법을 생각할 수 없다. 어떻게하면 "for line in range (X.shape [0]) :"와 같은 피할 수 있습니까? 왜냐하면 나는 모든 라인마다 무작위 샘플을 가지고 다른 분모를 계산해야하기 때문이다. 혼란스러워! –

+0

다음을 살펴보십시오. https://www.tensorflow.org/versions/r0.11/api_docs/python/nn.html#sampled_softmax_loss? 문서의 해당 함수 옆에있는 후보 샘플링 라이브러리 함수 중 일부는 여기에서도 도움이 될 수 있습니다. 소스가 어떻게 구현되는지 볼 수 있습니다. –