• Как посчитать частные производные функции по элементам матрицы?

    @dooble Автор вопроса
    Алан Гибизов,
    import numpy as np
    
    def sigmoid(x):
      return 1 / (1 + np.exp(-x))
    
    def d_sigmoid(x):
      fx = sigmoid(x)
      return fx*(1-fx)
    
    def mse_loss(y_trued, y_pred):
      return ((y_trued - y_pred)**2).mean()
    
    
    class NeuralNetwork:
      def __init__(self):
       self.w = np.random.normal(0,1,6)
       self.b = np.random.normal(0,1,3)
    
      def feedforward(self, x):
        h1 = sigmoid(self.w[0]*x[0]+self.w[1]*x[1]+self.b[0])
        h2 = sigmoid(self.w[2]*x[0]+self.w[3]*x[1]+self.b[1])
        o1 = sigmoid(self.w[4]*h1+self.w[5]*h2+self.b[2])
        return o1
    
      def train(self, data, all_y_trues):
        learn_rate = 0.1 #оценка обучения
        epochs = 10000 # количество циклов во всём наборе данных
        for epoch in range(epochs):
          for x, y_true in zip(data, all_y_trues):
            #считаем выход для каждого элемента
            sum_h1 = self.w[0]*x[0]+self.w[1]*x[1]+self.b[0]
            h1 = sigmoid(sum_h1)
            sum_h2 = self.w[2]*x[0]+self.w[3]*x[1]+self.b[1]
            h2 = sigmoid(sum_h2)
            sum_o1 = self.w[4]*h1+self.w[5]*h2+self.b[2]
            o1 = sigmoid(sum_o1)
    
            y_pred = o1 # выход 
            #считаем частные производные 
            
            d_L_d_ypred = -2*(y_true - y_pred)
    
            #нейрон h1
            d_h1_d_w1 = x[0]*d_sigmoid(sum_h1)
            d_h1_d_w2 = x[1]*d_sigmoid(sum_h1)
    
            d_h1_d_b1 = d_sigmoid(sum_h1)
            #нейрон h2
            d_h2_d_w3 = x[0]*d_sigmoid(sum_h2)
            d_h2_d_w4 = x[1]*d_sigmoid(sum_h2)
            d_h2_d_b2 = d_sigmoid(sum_h2)
            #нейрон o1
            d_ypred_d_w5 = h1*d_sigmoid(sum_o1)
            d_ypred_d_w6 = h2*d_sigmoid(sum_o1)
            d_ypred_d_b3 = d_sigmoid(sum_o1) 
            d_ypred_d_h1 = self.w[4]*d_sigmoid(sum_o1)
            d_ypred_d_h2 = self.w[5]*d_sigmoid(sum_o1)
            #Обновляем веса и смещения
            #нейрон h1
            self.w[0] -= learn_rate*d_L_d_ypred*d_ypred_d_h1*d_h1_d_w1
            self.w[1] -= learn_rate*d_L_d_ypred*d_ypred_d_h1*d_h1_d_w2
            self.b[0] -= learn_rate*d_L_d_ypred*d_ypred_d_h1*d_h1_d_b1
            #нейрон h2
            self.w[2] -= learn_rate*d_L_d_ypred*d_ypred_d_h2*d_h2_d_w3
            self.w[3] -= learn_rate*d_L_d_ypred*d_ypred_d_h2*d_h2_d_w4
            self.b[1] -= learn_rate*d_L_d_ypred*d_ypred_d_h2*d_h2_d_b2
            #нейрон o1
            self.w[4] -= learn_rate*d_L_d_ypred*d_ypred_d_w5
            self.w[5] -= learn_rate*d_L_d_ypred*d_ypred_d_w6
            self.b[2] -= learn_rate*d_L_d_ypred*d_ypred_d_b3
    
          if epoch%10==0:
            y_preds = np.apply_along_axis(self.feedforward,1,data)
            loss = mse_loss(all_y_trues,y_preds)
            print("Epoch %d loss: %.3f" % (epoch, loss))


    собственно вот код, я бы хотел считать производные не вручную, как это сделано тут, а с помощью каких-либо методов питона, а для этого следует брать частные производные по элементам матрицы w, и вектора h(в данном коде это переменные h1,h2)
  • Как посчитать частные производные функции по элементам матрицы?

    @dooble Автор вопроса
    Алан Гибизов, мне нужно найти градиент для стохастического градиентного спуска, а руками считать каждую частную производную как-то не очень хочется
  • Как посчитать частные производные функции по элементам матрицы?

    @dooble Автор вопроса
    Алан Гибизов, каким способом или методом можно посчитать производные функции по элементам матрицы, знаю у pyTorch и TenzorFlow есть такая возможность, но если подобная возможность у numPy?
  • Telegram Бот на python, как обойти блокировку?

    @dooble Автор вопроса
    Не подскажешь как именно прикрутить прокси сюда, просто все мануалы в интернете с использованием telebota
  • Не работает телеграм-парсер бот на Heroku?

    @dooble Автор вопроса
    Я выяснил, что функция не может завершить работу из-за этого запроса
    requestPrice = session.get(linksJs[i], headers=headers)

    Дело в том, что когда этот запрос в цикле, функция не может завершить свою работу, я пробовал выносить это из цикла и делать запрос на одну страницу и ошибки исчезла.
    Но без цикла, я не смогу перебрать все ссылки, на которые нужны отправить запрос. Возможно ли как-то это исправить, или может есть какое-то объяснение данной проблеме?
  • Не работает телеграм-парсер бот на Heroku?

    @dooble Автор вопроса
    Сергей Горностаев, такое ощущение, что в определенный момент функция просто прерывается непонятно из-за чего, а более непонятно это из-за того, что при запуске бота в pycharm всё отлично работает.
  • Не работает телеграм-парсер бот на Heroku?

    @dooble Автор вопроса
    Сергей Горностаев, нет, вообще ничего не возвращает. Пробовал комбинировать с ключами словаря, оставались те ключи, значения которых не зависят от парсинга, результат тот же.
  • Не работает телеграм-парсер бот на Heroku?

    @dooble Автор вопроса
    Сергей Горностаев функция не может ничего вернуть