我刚刚开始使用 lasagne 和 Theano 在 Python 上进行一些机器学习。
我正在尝试修改 Theano 中的 softmax 类。我想更改激活函数(softmax)的计算方式。我不想将 e_x 除以 e_x.sum(axis=1),而是将 e_x 除以三个连续数字的总和。
例如,结果将如下所示:
sm[0] = e_x[0]/(e_x[0]+e_x[1]+e_x[2])
sm[1] = e_x[1]/(e_x[0]+e_x[1]+e_x[2])
sm[2] = e_x[2]/(e_x[0]+e_x[1]+e_x[2])
sm[3] = e_x[3]/(e_x[3]+e_x[4]+e_x[5])
sm[4] = e_x[4]/(e_x[3]+e_x[4]+e_x[5])
sm[5] = e_x[5]/(e_x[3]+e_x[4]+e_x[5])
等等...
问题是我不能完全掌握 theano 是如何进行计算的。
这是我的主要问题。只需更改 softmax 类中的 perform() 函数就足够了吗?
这是原始的 perform() 函数:
def perform(self, node, input_storage, output_storage):
x, = input_storage
e_x = numpy.exp(x - x.max(axis=1)[:, None])
sm = e_x / e_x.sum(axis=1)[:, None]
output_storage[0][0] = sm
这是我修改后的 perform()
def myPerform(self, node, input_storage, output_storage):
x, = input_storage
e_x = numpy.exp(x - x.max(axis=1)[:, None])
sm = numpy.zeros_like(e_x)
for i in range(0,symbolCount):
total = e_x[3*i] + e_x[3*i+1] + e_x[3*i+2]
sm[3*i] = e_x[3*i]/total
sm[3*i+1] = e_x[3*i+1]/total
sm[3*i+2] = e_x[3*i+2]/total
output_storage[0][0] = sm
使用当前代码,当我在千层面中使用 predict 方法时出现“不可排序的类型:int()>str()”错误。