神经网络定义
算法
人工神经网络,简称神经网络,在机器学习和认知科学领域,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。bash
为了描述神经网络,咱们先从最简单的神经网络讲起,这个神经网络仅由一个“神经元”构成,如下便是这个“神经元”的图示:网络
能够看出,这个单一“神经元”的输入-输出映射关系其实就是一个逻辑回归(logistic regression)。dom
神经网络模型机器学习
所谓神经网络就是将许多个单一“神经元”联结在一块儿,这样,一个“神经元”的输出就能够是另外一个“神经元”的输入。例如,下图就是一个简单的神经网络:函数
Keras实战学习
使用keras实现以下网络结构, 并训练模型:优化
输入值(x1,x2,x3)表明人的身高体重和年龄, 输出值(y1,y2)ui
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
复制代码
建立模型spa
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):
复制代码
进行预测
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
想了解更多Python知识,Python骚操做的朋友,能够加群私聊我哦,705673780