【问题标题】:Neural Network Python Gradient Descent神经网络 Python 梯度下降
【发布时间】:2019-09-14 17:56:52
【问题描述】:

我是机器学习的新手,并试图理解它(自学)。所以我抓起一本书(如果有兴趣的话:https://www.amazon.com/Neural-Networks-Unity-Programming-Windows/dp/1484236726)开始阅读第一章。看书的时候,有一些不懂的地方,就上网查了一下。 但是,经过这么多的阅读和研究,我仍然有一些我无法理解的问题:

  1. 我们如何计算 l2_delta 和 l1_delta? (标有#what is this part doing? in below code)
  2. 梯度下降如何关联? (我查阅了公式并试图阅读一些关于它的内容,但我无法将一行代码与我那里的代码联系起来)
  3. 那是一个有 3 层的网络吗(第 1 层:3 个输入节点,第 2 层:不确定,第 3 层:1 个输出节点)

神经网络完整代码:

正在尝试编写我的第一个神经网络!

import numpy as np

#activation function (sigmoid , maps value between 0 and 1)
def sigmoid(x):
    return 1/(1+np.exp(-x))
def derivative(x):
    return x*(1-x)


#initialize input (4 training data (row), 3 features (col))
X = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])

#initialize output for training data (4 training data (rows), 1 output for each (col))
Y = np.array([[0],[1],[1],[0]])


np.random.seed(1)


#synapses
syn0 = 2* np.random.random((3,4)) - 1
syn1 = 2* np.random.random((4,1)) - 1




for iter in range(60000):
    #layers
    l0 = X
    l1 = sigmoid(np.dot(l0,syn0))
    l2 = sigmoid(np.dot(l1,syn1))
    #error
    l2_error = Y - l2
    if(iter % 10000 == 0): #only print error every 10000 steps to save time and limit the amount of output
        print("Error L2: " + str (np.mean(np.abs(l2_error))))
    
    #what is this part doing?
    l2_delta = l2_error * derivative(l2)
    l1_error = l2_delta.dot(syn1.T)
    
    l1_delta = l1_error * derivative(l1)
    if(iter % 10000 == 0): #only print error every 10000 steps to save time and limit the amount of output
        print("Error L1: " + str (np.mean(np.abs(l1_error))))
    
    #update weights 
    syn1 = syn1 + l1.T.dot(l2_delta) // derative with respect to cost function
    syn0 = syn2 + l0.T.dot(l1_delta)
    
    
print(l2)

谢谢!

【问题讨论】:

    标签: python-3.x neural-network gradient-descent


    【解决方案1】:

    一般来说,逐层计算(因此上面的符号 l1 和 l2)只是得到向量 $x \in \mathbb{R}^n$ 和相同维度的权重向量的点积,然后应用每个组件上的 sigmoid 函数。

    梯度下降。 - - - 想象一下,在二维图中,$f(x) = x^2$ 假设,我们不知道如何得到它的最小值。梯度下降基本上会在各个点评估$f'(x)$,并检查$f'(x)$ 是否接近于零

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 2015-07-11
      • 2011-08-24
      • 2022-09-28
      • 2020-10-17
      • 1970-01-01
      • 2016-10-31
      • 2017-02-19
      • 2019-04-16
      相关资源
      最近更新 更多