Как я могу применить обратное распространение при уклоне?

Это часть моего кода, написанного Python, многослойной нейронной сетью. Эта модель хорошо работает без смещения. Тем не менее, многие люди сказали, что модель NN должна иметь смещение. Я пытаюсь обновить мою модель, добавив смещение и обновив обратное распространение ошибки с помощью смещения. Как видите, я добавил весовую инициализацию смещения (** **). Тем не менее, я понятия не имею, как я могу сделать распространение ошибки обратно, когда я рассмотрел смещение. У вас есть представление об этой проблеме? Подводя итог моим вопросам. 1. Как я могу рассчитать ошибку смещения?

hidden_errors2 = numpy.dot(self.who.T, output_errors)
hidden_errors = numpy.dot(self.whh2.T, hidden_errors2)
  1. Как я могу обновить вес смещения?

    self.who + = self.lrnumpy.dot ((output_errors final_outputs * (1.0-final_outputs)), numpy.transpose (hidden_outputs2)) self.whh2 + = self.lr * numpy.dot ((hidden_errors2 * hidden_outputs2 * (1.0 -hidden_outputs2)), numpy.transpose (hidden_outputs)) self.wih + = self.lrnumpy.dot ((hidden_errors hidden_outputs * (1.0-hidden_outputs)), numpy.transpose (входные данные))

Это часть кода NN.

================================================== ==============================

класс nn: def init(self, входные узлы, hiddennodes, hiddennodes2, выходные узлы, скорость обучения, biasinput, biashidden, biashidden2): self.inodes = inputnodes self.hnodes = скрытые узлы self.hnodes2 = hiddennodes2 self.onodes = outputnodes

    **self.binodes = biasinput
    self.bhnodes = biashidden
    self.bhnodes2 = biashidden2**

    self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes))
    self.whh2 = numpy.random.normal(0.0, pow(self.hnodes2, -0.5), (self.hnodes2, self.hnodes))
    self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes2))

    **self.bwih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.binodes))
    self.bwhh2 = numpy.random.normal(0.0, pow(self.hnodes2, -0.5), (self.hnodes2, self.bhnodes))
    self.bwho = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.bhnodes2))**

    self.lr = learningrate

    self.activation_function = lambda x: scipy.special.expit(x)

    pass


def train(self, inputs_list, targets_list):
    inputs = numpy.array(inputs_list, ndmin=2).T
    targets = numpy.array(targets_list, ndmin=2).T

    hidden_inputs = numpy.dot(self.wih, inputs)+self.bwih
    hidden_outputs = self.activation_function(hidden_inputs)


    hidden_inputs2 = numpy.dot(self.whh2, hidden_outputs)+self.bwhh2
    hidden_outputs2 = self.activation_function(hidden_inputs2)

    final_inputs = numpy.dot(self.who, hidden_outputs2)+self.bwho

    final_outputs = self.activation_function(final_inputs)

    output_errors = targets - final_outputs

    hidden_errors2 = numpy.dot(self.who.T, output_errors)
    hidden_errors = numpy.dot(self.whh2.T, hidden_errors2)

    self.who += self.lr*numpy.dot((output_errors*final_outputs*(1.0-final_outputs)), numpy.transpose(hidden_outputs2))
    self.whh2 += self.lr*numpy.dot((hidden_errors2*hidden_outputs2*(1.0-hidden_outputs2)), numpy.transpose(hidden_outputs))
    self.wih += self.lr*numpy.dot((hidden_errors*hidden_outputs*(1.0-hidden_outputs)), numpy.transpose(inputs))
    pass

0 ответов

Другие вопросы по тегам