菜单

www.bway883.com入门神经网络

2018年12月13日 - www.bway883.com

下同样篇传送门

英文原稿,即使为是自身形容的
Chinglish,不过盖事先在加拿大有有些村校上学导致粤语术语或者会面发布不准。

章与代码皆以这时候,用来骗 欢迎Star GitHub
repo

准备工作

读懂就首小说,需要而有以下地方的学识

假若起下列知识就再好了

有此外没有看懂的局部,欢迎留言,信不迷信我一半钟头内秒回。

一个巨简单的神经网络(A Deadly Simple NN)

设您对神经网络(neural
network)
感谢兴趣或关注了有关的章,这下图被的这么些模型或你莫会师感到卓殊生疏。

一个人工神经网络模型

然这或许于新家有接触未极端友好?这看看下边那一个简化版的

一个无隐层的神经网络

图里之这些东西,我们一个一个之捋一不折不扣。每个肉色之圆代表一个神经元(neuron)。每个方块代表一个运算,比如
+ 代表求和。上图备受极右侧的老两只神经元组成了输入层(input
layer)
,包含一个 h 的神经细胞组成了输出层(output
layer)
,并且及时同一层惟有这些神经元。

出口层神经元的输入值

对生物学意义及之神经细胞来说,平常有一个阈值(threshold)来如其达到提神之状态,也就是给激活。在咱们所研究的神经网络中,我们的神经细胞将会师经过输入值和激活函数(activation
function)
算一个输出值。激活函数最值得表扬的某些尽管是它好是此外项目标函数,包括但无压跃阶函数,多项式函数或者
sigmoid 函数。h 是出口神经元的输入值,结合激活函数,输出神经元会输出
f(h) 总计的结果 y,也便是举神经网络的输出值。

万一您采取 f(h) = h
作为你的激活函数,那么你的神经网络输出结果将晤面是产图备受的这几个公式,这里
y = f(h)

神经网络的出口

使您道这看起是一个线性回归的型,这尽管本着了。如果您的激活函数是连续可导的,那么(平常情状下)你虽好接纳一个被做
梯度下降(gradient descent)
的不二法门来磨练你的网。然则当下清楚起来如稍稍麻烦一点,在我们深入到练习之手续此前,我们事先来编排一个不行简单的程序来打探神经网络作出预测的长河。我们用选取sigmoid 函数作为激活函数, Python
作为编程语言。预测的斯过程是一律种前馈(feedforward)的预计,仅仅有及时同样有的神经网络是无可知念的(例如,通过反向传播(backpropagation)),但咱稍后又关注磨练上的有。

Sigmoid 函数

import numpy as np

def sigmoid(x):
    # sigmoid function
    return 1/(1 + np.exp(-x))

inputs = np.array([0.7, -0.3])
weights = np.array([0.1, 0.8])
bias = -0.1

# calculate the output
output = sigmoid(np.dot(weights, inputs) + bias)

print('Output:')
print(output)

代码和此刻也

第一独单隐层神经网络(Your First 2-Layer NN)

流淌:单隐层,即为统揽一个隐层,一个输出层的神经网络,输入层和输出层因为凡须的,所以无计数。

兹你已主导清楚了一个神经网络是怎么算预测结果的。在现实生活中,我们面临的估计问题频非常复杂,那样概括的纱布局或远远不够。那里我们设引入一个初的概念,隐层(hidden
layer)

一个颇具三独输入层神经元,两独隐层神经元和一个出口层神经元的神经网络

在第一局部挺简单的网络型中,我们的权重(weight)大凡一个向量。可是对于多数神经网络来说,其实权重将会合是一个之类图一律的矩阵。

其三单输入层神经元和少单隐层神经元的权重矩阵

结合第一片段的解与上边单隐层神经网的模型,你或已经亮怎么通过是模型统计
h1 的现实数值了。大家让起一个简单易行的公式定义

计量隐层神经元输入值的公式

对此我们所关心之斯单隐层模型来说,它是下这样的

算算隐层输入值的矩阵乘法

注意!!:上图被之权重下角标已经变更为矩阵的表明模式,并无是与单隐层神经网络图备受之下角标所对应之。因为在矩阵的表明方法中,是用行/列的次第来号的。所以若就此示意图中的法门标明的话,会招致一些误解。

之所以先前神经网络模型图被的下角标所标注的矩阵

牢记,上图被之斯匡过程使用的永不是矩阵使用的角标,但以此跟我们地方单隐层神经网络的示意图中的标注是一样的。

组成方面所法的文化,大家可疾速构建一个单隐层神经网络的前馈(即预测)过程了。大家依然接纳sigmoid 函数作为我们的激活函数(并且于后头好充裕日子还晤面由此此函数)。

亟待办事项:

import numpy as np

def sigmoid(x):
    # sigmoid function
    return 1/(1+np.exp(-x))

# 神经网络各层神经元数量
N_input = 3
N_hidden = 2
N_output = 1

np.random.seed(42)
# Make some fake data
X = np.random.randn(4)

# 生成输入层到隐层/隐层到输出层权重
weights_in_hidden = np.random.normal(0, scale=0.1, size=(N_input, N_hidden))
weights_hidden_out = np.random.normal(0, scale=0.1, size=(N_hidden, N_output))

# 计算隐层的输入值/输出值
hidden_layer_in = np.dot(X, weights_in_hidden)
hidden_layer_out = sigmoid(hidden_layer_in)

print('Hidden-layer Output:')
print(hidden_layer_out)

# 计算输出层的输入值/输出值
output_layer_in = np.dot(hidden_layer_out, weights_hidden_out)
output_layer_out = sigmoid(output_layer_in)

print('Output-layer Output:')
print(output_layer_out)

代码在此时

参考资料

Thanks for reading. If you find any mistake/typo in this blog, please
don’t hesitate to let me know, you can reach me by email:
jyang7[at]www.bway883.com,ualberta.ca

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图