2
我寫了一個簡單的Python代碼來計算一個集合的熵,我試圖在Theano中寫同樣的東西。Theano中的熵和概率
import math
# this computes the probabilities of each element in the set
def prob(values):
return [float(values.count(v))/len(values) for v in values]
# this computes the entropy
def entropy(values):
p = prob(values)
return -sum([v*math.log(v) for v in p])
我試圖寫在Theno等效代碼,但我不知道如何做到這一點:
import theano
import theano.tensor as T
v = T.vector('v') # I create a symbolic vector to represent my initial values
p = T.vector('p') # The same for the probabilities
# this is my attempt to compute the probabilities which would feed vector p
theano.scan(fn=prob,outputs_info=p,non_sequences=v,n_steps=len(values))
# considering the previous step would work, the entropy is just
e = -T.sum(p*T.log(p))
entropy = theano.function([values],e)
然而,掃描線是不正確的,我得到噸的錯誤。我不確定是否有簡單的方法來實現它(計算矢量的熵),還是必須在掃描功能上付出更多的努力。有任何想法嗎?
Theano無法在列表上進行計算。您必須更新您的代碼才能使用ndarray。首先只用numpy來做到這一點。這應該已經加快你的代碼。 – nouiz