人工神经网络
人工神经网络是模仿生物神经网络的结构和功能的数学模型或计算模型。通常分为三部分:
- 结构(Architecture)结构指定了网络中的变量和他们的拓扑关系。例如变量可以是神经元连接的权重(weights)和神经元的激励值(activities of the neurons)
- 激励函数定义神经元如何根绝其他神经元的活动来改变自己的激励值。
- 学习规则指定了网络中的权重如何随着时间的推进而调整。
神经元
下图是一个神经元的简单模型
![](https://img.haomeiwen.com/i12496140/5a47d2ca9acfcc12.png)
- a1 ~ an 为输入向量的各个分量
- w1 ~ wn 为神经元各个突触的权值
- b为偏置
- f为传递函数。通常为非线性函数
- t为神经元输出
数学表达式为t = f(\vec{W'}\vec{A} + b)
单层神经网络
是最基本的神经元网络形式,由有限个神经元构成,所有的神经元的输入向量都是同一个向量。每一个神经元会产生一个标量结果,所以单层神经元的输出是一个向量,向量的维数等于神经元的数目。
多层神经元网络
通常,一个神经元网络是由一个多层神经元结构组成,每一层神经元拥有输入和输出。每一层Layer(i)是由N_i个网络神经元组成,每个N_i上的网络神经元把对应在N_i-1上的神经元输出作为它的输入。我们把神经元和与之对应的神经元之间的连线叫做突触。
在数学模型中每个突触都有一个加权数值,我们称之为权重。要计算第i层上的某个神经元所得到的势能等于每一个权重乘以第i-1层对应的神经元的输入,然后全体求和得到第i层上的某个神经元得到的势能。然后该值通过神经元上的激活函数以控制输出大小。
多层结构一般分为
- 输入层(Input layer):神经元接受大量非线性输入消息。输入的消息称为输入向量。
- 输出层(Output layer):输出的消息称为输出向量。
- 隐藏层(Hidden layer):可以是一层或者多层,隐层的节点数目不定,但是数目越多神经网络的非线性越显著。习惯上选输入节点1.2至1.5倍的节点。
指定输入数据的尺寸
模型需要知道它所期望的输入的尺寸。顺序模型中的第一层需要接受关于其输入尺寸的信息。有以下几种方法:
- 传递一个
input_shape
参数给第一层。该参数是一个表示尺寸的元组。 - 某些2D层,例如
Dense
,支持通过input_dim
指定输入尺寸。某些3D时序层支持input_dim
参数和input_length
参数 - 如果需要为输入制定一个固定的batch(每次训练在训练集中取batchsize个样本训练),则可以传递一个
batch_sizez
参数给一个层。
以下代码片段是等价的:
model = Sequential()
model.app(Dense(32, input_shape= (784, )))
model = Sequential()
model.add(Dense(32, input_dim=783))
Layers
Dense
keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
是最普通的全连接层。
参数
- units:正整数,输出空间维度。
- activation:激活函数。
- use-bias:布尔值,决定该层是否使用偏置向量。
输入尺寸
nD向量,尺寸为:(batch_size,..., input_dim)
。最常见的一个尺寸是(batch_size,imput_dim)
的2D输入。
输出尺寸
nD向量,尺寸(batch_size,..., units)
。例如对于尺寸为(batch_size,imput_dim)
的2D输入,输出尺寸为(batch_size,units)
。
LSTM
keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)
长短期记忆网络层
输入尺寸
3D张量,尺寸为(batch_size, timesteps, input_dim)
输出尺寸
- 如果
return_state
为True,则返回张量列表。第一个张量为输出,剩余的张量为最后的状态,每个张量尺寸为(batch_size, units)
。 - 否则,返回尺寸为
(batch_size, units)
的2D张量。
网友评论