神经网络基础及Keras入门


声明:本文转载自https://my.oschina.net/u/3994209/blog/2885464,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

神经网络定义

人工神经网络,简称神经网络,在机器学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。

为了描述神经网络,我们先从最简单的神经网络讲起,这个神经网络仅由一个“神经元”构成,以下即是这个“神经元”的图示:

可以看出,这个单一“神经元”的输入-输出映射关系其实就是一个逻辑回归(logistic regression)。

神经网络模型

所谓神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入。例如,下图就是一个简单的神经网络:

Keras实战

使用keras实现如下网络结构, 并训练模型:

输入值(x1,x2,x3)代表人的身高体重和年龄, 输出值(y1,y2)

importnumpyasnp

# 总人数是1000, 一半是男生

n =1000

# 所有的身体指标数据都是标准化数据, 平均值0, 标准差1

tizhong = np.random.normal(size = n)

shengao = np.random.normal(size=n)

nianling = np.random.normal(size=n)

# 性别数据, 前500名学生是男生, 用数字1表示

gender = np.zeros(n)

gender[:500] =1

# 男生的体重比较重,所以让男生的体重+1

tizhong[:500] +=1

# 男生的身高比较高, 所以让男生的升高 + 1

shengao[:500] +=1

# 男生的年龄偏小, 所以让男生年龄降低 1

nianling[:500] -=1

创建模型

fromkerasimportSequential

fromkeras.layersimportDense, Activation

model = Sequential()

# 只有一个神经元, 三个输入数值

model.add(Dense(4, input_dim=3, kernel_initializer='random_normal', name="Dense1"))

# 激活函数使用softmax

model.add(Activation('relu', name="hidden"))

# 添加输出层

model.add(Dense(2, input_dim=4, kernel_initializer='random_normal', name="Dense2"))

# 激活函数使用softmax

model.add(Activation('softmax', name="output"))

编译模型

需要指定优化器和损失函数:

model.compile(optimizer='rmsprop',

loss='categorical_crossentropy',

metrics=['accuracy'])

训练模型

# 转换成one-hot格式

fromkerasimportutils

gender_one_hot = utils.to_categorical(gender, num_classes=2)

# 身体指标都放入一个矩阵data 

data = np.array([tizhong, shengao, nianling]).T

# 训练模型

model.fit(data, gender_one_hot, epochs=10, batch_size=8)
输出(stream):

Epoch1/10

1000/1000[==============================] -0s235us/step - loss:0.6743- acc:0.7180

Epoch2/10

1000/1000[==============================] -0s86us/step - loss:0.6162- acc:0.7310

Epoch3/10

1000/1000[==============================] -0s88us/step - loss:0.5592- acc:0.7570

Epoch4/10

1000/1000[==============================] -0s87us/step - loss:0.5162- acc:0.7680

Epoch5/10

1000/1000[==============================] -0s89us/step - loss:0.4867- acc:0.7770

Epoch6/10

1000/1000[==============================] -0s88us/step - loss:0.4663- acc:0.7830

Epoch7/10

1000/1000[==============================] -0s87us/step - loss:0.4539- acc:0.7890

Epoch8/10

1000/1000[==============================] -0s86us/step - loss:0.4469- acc:0.7920

Epoch9/10

1000/1000[==============================] -0s88us/step - loss:0.4431- acc:0.7940

Epoch10/10

1000/1000[==============================] -0s88us/step - loss:0.4407- acc:0.7900

输出(plain)://Python学习开发705673780

进行预测

test_data = np.array([[0,0,0]])

probability = model.predict(test_data)

ifprobability[0,0]>0.5:

print('女生')

else:

print('男生')

###

输出(stream):

女生

关键词解释

input_dim: 输入的维度数

kernel_initializer: 数值初始化方法, 通常是正太分布

batch_size: 一次训练中, 样本数据被分割成多个小份, 每一小份包含的样本数叫做batch_size

epochs: 如果说将所有数据训练一次叫做一轮的话。epochs决定了总共进行几轮训练。

optimizer: 优化器, 可以理解为求梯度的方法

loss: 损失函数, 可以理解为用于衡量估计值和观察值之间的差距, 差距越小, loss越小

metrics: 类似loss, 只是metrics不参与梯度计算, 只是一个衡量算法准确性的指标, 分类模型就用accuracy

 

看完觉得有所收获的朋友可以点赞加关注哦,谢谢支持!

本文发表于2018年11月21日 18:00
(c)注:本文转载自https://my.oschina.net/u/3994209/blog/2885464,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1947 讨论 0 喜欢 1

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1