Я только начал использовать лазанью и Theano для машинного обучения на Python.
Я пытаюсь изменить класс softmax в Theano. Я хочу изменить способ расчета функции активации (softmax). Вместо деления e_x на e_x.sum(ось=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 выполняет вычисления.
Вот мой главный вопрос. Достаточно ли просто изменить функцию Perform() в классе softmax?
Вот оригинальная функция 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
С текущим кодом я получаю ошибку «неупорядоченные типы: int()>str()», когда использую метод прогнозирования в лазанье.