Python神经网络入门:使用Keras进行回归分析
本文介绍如何利用Python中的Keras库构建神经网络进行回归运算。Keras作为Tensorflow的高阶API,通过Sequential序贯模型和Dense全连接层简化模型构建。文章详细解析了model.compile中loss函数(如mse)与优化器(如sgd)的配置,并提供了一元线性回归的完整代码示例及运行结果分析。
学习前言
在浏览众多GitHub项目时发现,保存和加载模型的主流库多为Keras,因此深入掌握其用法显得尤为重要。
什么是Keras
Keras是一个基于Python开发的开源人工神经网络库,它可作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,用于深度学习模型的设计、调试、评估、应用及可视化。
Keras可视为比Tensorflow和Theano更高层级的库,它能够以这两者为底层框架,以更简洁高效的代码方式实现功能。
自2018年Tensorflow 2.0.0版本发布后,Keras被正式确立为Tensorflow的高阶API。
Keras中基础的重要函数
1、Sequential
Sequential通常被称为序贯模型。
该模型结构最为简单,呈现为从头到尾的线性结构,无分支,由多个网络层线性堆叠而成。
在使用Keras构建模型前,只需通过以下函数初始化模型即可。
model = Sequential()此时已创建一个按顺序排列的模型,后续添加网络层时,均按照既定顺序进行。
2、Dense
Dense层用于向Sequential模型中添加全连接层。全连接层的结构示意图如下所示(图片源自百度百科)。

具体而言,在简单的BP神经网络中,输入层到隐含层之间的权值连接机制与全连接层的概念一致。在Keras中,若需向model添加全连接层,可使用如下函数。
model.add(Dense(output_dim = 1,input_dim = 1))上述代码表示输入维度为1,输出维度同样为1。
3、model.compile
在Keras中,model.compile的主要作用是定义损失函数(loss)和优化器(optimizer)。
其调用方式如下所示:
model.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])其中loss参数用于定义计算损失的函数,可选内容如下: 1、mse:均方误差,常用于回归预测任务。
2、categorical_crossentropy:即多类对数损失,使用该目标函数时,需将标签转化为形如(nb_samples, nb_classes)的二值序列,常用于分类任务。
3、sparse_categorical_crossentrop:与上述类似,但接受稀疏标签格式。
optimizer参数用于定义优化算法,既可使用默认设置,也可从keras.optimizers模块中导出。
具体可选内容可参考Keras中文文档。上文示例中选择了随机梯度下降法sgd。
metrics=[‘accuracy’]常用于分类运算,用于计算分类精确度;本例为回归任务,故不适用。
全部代码
该示例为一元线性回归的实现。
import numpy as np
from keras.models import Sequential
from keras.layers import Dense ## 全连接层
import matplotlib.pyplot as plt
# 生成测试数据
X = np.linspace(-1,1,200)
np.random.shuffle(X)
Y = 0.5*X + 2 + np.random.normal(0,0.05,(200,))
# 划分训练集和测试集
X_train,Y_train = X[:160],Y[:160]
X_test,Y_test = X[160:],Y[160:]
# start
model = Sequential()
model.add(Dense(output_dim = 1,input_dim = 1))
# compile
model.compile(loss = 'mse',optimizer = 'sgd')
# 训练
print("\ntraining")
for step in range(2001):
cost = model.train_on_batch(X_train,Y_train)
if step%100 == 0:
print("tarin_cost:",cost)
# 测试
print("\nTest")
cost = model.evaluate(X_test,Y_test,batch_size=40)
W,b = model.layers[0].get_weights()
print("Weights",W,"biaxes",b)
# 预测结果
Y = model.predict(X_test)
plt.scatter(X_test,Y_test)
plt.plot(X_test,Y)
plt.show()
最终实现结果如下:
tarin_cost: 4.506874
tarin_cost: 0.21098542
tarin_cost: 0.041809298
tarin_cost: 0.013134768
tarin_cost: 0.0055761375
tarin_cost: 0.0035068158
tarin_cost: 0.0029388934
tarin_cost: 0.002783
tarin_cost: 0.0027402083
tarin_cost: 0.002728462
tarin_cost: 0.0027252387
tarin_cost: 0.0027243525
tarin_cost: 0.0027241106
tarin_cost: 0.0027240426
tarin_cost: 0.002724025
tarin_cost: 0.0027240203
tarin_cost: 0.0027240184
tarin_cost: 0.0027240182
tarin_cost: 0.0027240175
tarin_cost: 0.0027240175
tarin_cost: 0.0027240175
Test
40/40 [==============================] - 0s 874us/step
Weights [[0.5041559]] biaxes [1.9961643]

以上就是Python神经网络学习中使用Keras进行回归运算的详细内容,更多关于Python神经网络Keras回归运算的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









