gpt4 book ai didi

python-2.7 - 有人可以解释一下这个神经网络机器学习代码吗?

转载 作者:行者123 更新时间:2023-11-30 09:00:41 25 4
gpt4 key购买 nike

import numpy as np

def nonlin(x, deriv=False):
if (deriv == True):
return (x * (1 - x))
return 1 / (1 + np.exp(-x))

X = np.array([[1,1,1],
[3,3,3],
[2,2,2]
[2,2,2]])

y = np.array([[1],
[1],
[0],
[1]])

np.random.seed(1)

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

for j in xrange(100000):
l0 = X
l1 = nonlin(np.dot(l0, syn0))
l2 = nonlin(np.dot(l1, syn1))
l2_error = y - l2
if (j % 10000) == 0:
print "Error: " + str(np.mean(np.abs(l2_error)))

l2_delta = l2_error * nonlin(l2, deriv=True)

l1_error = l2_delta.dot(syn1.T)

l1_delta = l1_error * nonlin(l1, deriv=True)

syn1 += l1.T.dot(l2_delta)
syn0 += l0.T.dot(l1_delta)

print "Output after training"
print l2

有人可以解释一下它打印的内容以及为什么它很重要吗?这段代码对我来说似乎没有意义。 for 循环应该针对给定的数据集优化网络中的神经元。但它是如何做到这一点的呢?非线性函数有什么用?这是做什么的?:

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

最佳答案

这是训练神经网络的简单代码:

这是一个神经元的激活,该函数返回激活函数或其导数(它是一个 sigmoid 函数)。

def nonlin(x, deriv=False):
if (deriv == True):
return (x * (1 - x))
return 1 / (1 + np.exp(-x))

在这张图中你可以看到一个神经元,这个函数在图中显示为阶跃函数:

https://blog.dbrgn.ch/images/2013/3/26/perceptron.png

这些是下雨数据,四个数据,三个特征

X = np.array([[1,1,1],
[3,3,3],
[2,2,2]
[2,2,2]])

每个数据的标签(二元分类任务)

y = np.array([[1],
[1],
[0],
[1]])

此代码初始化神经网络的权重(这是一个具有两层权重的神经网络):

np.random.seed(1)

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

在这张图中,权重是 vnm 和 wkn,并且是矩阵(每个链接的值)。

https://www.google.es/search?q=multilayer+perceptron&espv=2&biw=1920&bih=964&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjtjP6jr_jPAhUHORoKHbiACdsQ_AUIBigB#imgrc=5npsALleN2cFQM%3A

在你的例子中,你有 3 个输入神经元、4 个隐藏神经元和 1 个输出神经元。每个链接的值都存储在syn0和syn1中。

此代码训练神经网络,它传递每个数据,评估误差并使用反向传播更新权重:

for j in xrange(100000):
l0 = X
l1 = nonlin(np.dot(l0, syn0))
l2 = nonlin(np.dot(l1, syn1))
l2_error = y - l2
if (j % 10000) == 0:
print "Error: " + str(np.mean(np.abs(l2_error)))

l2_delta = l2_error * nonlin(l2, deriv=True)

l1_error = l2_delta.dot(syn1.T)

l1_delta = l1_error * nonlin(l1, deriv=True)

syn1 += l1.T.dot(l2_delta)
syn0 += l0.T.dot(l1_delta)

关于python-2.7 - 有人可以解释一下这个神经网络机器学习代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com