【发布时间】:2019-09-14 17:56:52
【问题描述】:
我是机器学习的新手,并试图理解它(自学)。所以我抓起一本书(如果有兴趣的话:https://www.amazon.com/Neural-Networks-Unity-Programming-Windows/dp/1484236726)开始阅读第一章。看书的时候,有一些不懂的地方,就上网查了一下。 但是,经过这么多的阅读和研究,我仍然有一些我无法理解的问题:
- 我们如何计算 l2_delta 和 l1_delta? (标有#what is this part doing? in below code)
- 梯度下降如何关联? (我查阅了公式并试图阅读一些关于它的内容,但我无法将一行代码与我那里的代码联系起来)
- 那是一个有 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