有人能解释一下这段神经网络机器学习代码吗?

有人能解释一下它输出的内容以及为什么这很重要吗?这段代码对我来说似乎毫无意义。那个for循环应该是用来针对给定数据集优化网络中的神经元的。但它是如何做到这一点的呢?nonlin函数是做什么用的?这段代码是做什么的?

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

回答:

这是一段用于训练神经网络的简单代码:

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

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

这些是训练数据,包含四个具有3个特征的数据点

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)) - 1syn1 = 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个输出神经元。每条连接的值存储在syn0syn1中。

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

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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注