理解keras中的quential模型

更新时间:2023-06-23 22:39:41 阅读: 评论:0

理解keras中的quential模型
keras中的主要数据结构是model(模型),它提供定义完整计算图的⽅法。通过将图层添加到现有模型/计算图,我们可以构建出复杂的神经⽹络。
Keras有两种不同的构建模型的⽅法:
1. Sequential models
2. Functional API
keven本⽂将要讨论的就是keras中的Sequential模型。
理解Sequential模型
Sequential模型字⾯上的翻译是顺序模型,给⼈的第⼀感觉是那种简单的线性模型,但实际上Sequential模型可以构建⾮常复杂的神经⽹络,包括全连接神经⽹络、卷积神经⽹络(CNN)、循环神经⽹络(RNN)、等等。这⾥的Sequential更准确的应该理解为堆叠,通过堆叠许多层,构建出深度神经⽹络。
如下代码向模型添加⼀个带有64个⼤⼩为3 * 3的过滤器的卷积层:
dels import Sequential
from keras.layers import Den, Activation,Conv2D,MaxPooling2D,Flatten,Dropout
model = Sequential()
model.add(Conv2D(64, (3, 3), activation='relu'))
Sequential模型的核⼼操作是添加layers(图层),以下展⽰如何将⼀些最流⾏的图层添加到模型中:
卷积层
model.add(Conv2D(64, (3, 3), activation='relu'))
最⼤池化层
model.add(MaxPooling2D(pool_size=(2, 2)))
全连接层圆锥曲线方程
五十步笑百步译文
iphonesmodel.add(Den(256, activation='relu'))
dropout
model.add(Dropout(0.5))
Flattening layer(展平层)
model.add(Flatten())
基本的Sequential模型开发流程
cambodia
从我们所学习到的机器学习知识可以知道,机器学习通常包括定义模型、定义优化⽬标、输⼊数据、训练模型,最后通常还需要使⽤测试数据评估模型的性能。keras中的Sequential模型构建也包含这些步骤。
⾸先,⽹络的第⼀层是输⼊层,读取训练数据。为此,我们需要指定为⽹络提供的训练数据的⼤⼩,这⾥input_shape参数⽤于指定输⼊数据的形状:现在完成时讲解
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))
上⾯的代码中,输⼊层是卷积层,其获取224 * 224 * 3的输⼊图像。
接下来就是为模型添加中间层和输出层,请参考上⾯⼀节的内容,这⾥不赘述。
然后,进⼊最重要的部分: 选择优化器(如rmsprop或adagrad)并指定损失函数(如categorical_crosntropy)来指定反向传播的计算⽅法。在keras中,Sequential模型的compile⽅法⽤来完成这⼀操作。例如,在下⾯的这⼀⾏代码中,我们使⽤’rmsprop’优化器,损失函数为’binary_crosntropy’。
optimizer='rmsprop')
到这⼀步,我们创建了模型,接下来就是调⽤fit函数将数据提供给模型。这⾥还可以指定批次⼤⼩(batch size)、迭代次数、验证数据集等等。其中批次⼤⼩、迭代次数需要根据数据规模来确定,并没有⼀个固定的最优值。
model.fit(x_train, y_train, batch_size=32, epochs=10,validation_data=(x_val, y_val))
最后,使⽤evaluate⽅法来评估模型:
score = model.evaluate(x_test,y_test,batch_size = 32)
以上就是在Keras中使⽤Sequential模型的基本构建块,相对于tensorflow,keras的代码更少,接⼝更加清晰,更重要的是,keras的后端框架切(⽐如从tensorflow切换到Theano)换后,我们的代码不需要做任何修改。
使⽤Sequential模型解决线性回归问题
谈到tensorflow、keras之类的框架,我们的第⼀反应通常是深度学习,其实⼤部分的问题并不需要深度学习,特别是在数据规模较⼩的情况下,⼀些机器学习算法就可以解决问题。除了构建深度神经⽹络,keras也可以构建⼀些简单的算法模型,下⾯以线性学习为例,说明使⽤keras解决线性回归问题。
线性回归中,我们根据⼀些数据点,试图找出最拟合各数据点的直线。为了说明这⼀问题,我们创建100个数据点,然后通过回归找出拟合这100个数据点的直线。
1. 创建训练数据
import keras
dels import Sequential
from keras.layers import Den
right here waiting歌词import numpy as np
trX = np.linspace(-1, 1, 101)
trY = 3 * trX + np.random.randn(*trX.shape) * 0.33
上⾯这段代码创中,TrainX的值在-1和1之间均匀分布,⽽TrainY的值为TrainX的三倍,但增加了⼀些随机扰动。
1. 创建模型
model = Sequential()
model.add(Den(input_dim=1, output_dim=1, init='uniform', activation='linear'))
代码创建⼀个Sequential模型,这⾥使⽤了⼀个采⽤线性激活的全连接(Den)层。它实际上封装了输⼊值x乘以权重w,加上偏置(bias)b,然后进⾏线性激活以产⽣输出。
我们可以查看默认初始化的权重和偏置值:
weights = model.layers[0].get_weights()
w_init = weights[0][0][0]
b_init = weights[1][0]
print('Linear regression model is initialized with weights w: %.2f, b: %.2f' % (w_init, b_init))
1. 选择优化器和损失函数
高等学校英语应用能力考试成绩查询选择简单的梯度递减优化算法,损失函数选择均⽅差(mean squared error, m)。
1. 训练模型
model.fit(trX, trY, nb_epoch=200, verbo=1)
训练完毕之后,我们可以再看看权重值和偏置值
weights = model.layers[0].get_weights()
foot locker
w_final = weights[0][0][0]
b_final = weights[1][0]
print('Linear regression model is trained to have weight w: %.2f, b: %.2f' % (w_final, b_final))
最后的结果为
Linear regression model is trained to have weight w: 2.94, b: 0.08
可以看到,进⾏200次迭代之后,权重值现在⾮常接近3。我们可以尝试修改迭代次数,看看不同迭代次数下得到的权重值。
crma这段例⼦仅仅作为⼀个简单的⽰例,所以没有做模型评估,有兴趣的同学可以构建测试数据⾃⼰尝试⼀下。
总结
keras中的Sequential模型其实⾮常强⼤,⽽且接⼝简单易懂,⼤部分情况下,我们只需要使⽤Sequential模型即可满⾜需求。在某些特别的场合,可能需要更复杂的模型结构,这时就需要Functional API,在后⾯的教程中,我将探讨Functional API。
参考
1.
2.

本文发布于:2023-06-23 22:39:41,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/155349.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   数据   构建   学习   次数   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图