Keras学习(一)—— Keras 模型(keras.model): Sequential 顺序模型 和 Model 模型

Keras学习(一)—— Keras 模型(keras.model): Sequential 顺序模型 和 Model 模型KerasModel模型Keras中文文档Keras模型Sequential顺序模型Sequential使用方法一个简单的Sequential示例构建方法inputshape输入的形状(格式)complication编译training训练Model模型Model使用方法compile编译fit进行训练evaluate函数进行评估Keras中文文档首先了解Keras…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Keras 中文文档

首先了解Keras的一个很好的途径就是通过 文档
Keras 中文文档地址: https://keras.io/zh/models/about-keras-models/

可以通过查看官方文档更加准确地了解相关信息。

Keras 模型

Keras提供的模型,其中分为两类:

  • Sequential 顺序模型
  • Model 类模型

我们可以通过 from keras.models import Sequential 或者 from keras.models import Model 来导入对应的模型。

Sequential 顺序模型


参考Keras文档: https://keras.io/models/sequential/


  • Sequential 模型结构: 层(layers)的线性堆栈。简单来说,它是一个简单的线性结构,没有多余分支,是多个网络层的堆叠。

Sequential使用方法

一个简单的Sequential示例

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

Jetbrains全家桶1年46,售后保障稳定

从上述代码中可以看出:

  • from keras.models import Sequential 引入Sequential
  • model = Sequential([...])则开始构建model
    • 其中,Dense是一个全连接层,它的激活函数默认为是linear线性函数
    • 激活函数可以通过 单独的激活层 实现,也可以通过 构建层时传递activation实现,这就是说:
  model.add(Dense(64))
  model.add(Activation('tanh'))

等价于

model.add(Dense(64, activation='tanh'))

构建方法

除了上面代码的:

model = Sequential([
    Dense(32, input_shape=(784,)),
    Activation('relu'),
    Dense(10),
    Activation('softmax'),
])

还可以简单的写为:

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

input shape 输入的形状(格式)

构建一个模型时,第一层需要给出期待的Input shape ,剩余的层次会自动判断。

  • input shape是一个tuple格式的数据,可以是整数的tuple,也可以是None

  • input shape中并没有batch dimension 批量维度

  • 2D层,例如Dense, 通过指定参数 input_dim (一个数字)来描述输入形状。

  • 3D层,通过参数 input_diminput_length来描述输入型状。

  • 参数input_shape 通过tuple的形式,指定输入形状。

  • 参数batch_size可以指定固定批量大小。

batch_size=32 + input_shape=(6, 8) = (32, 6, 8)

示例:

model = Sequential()
model.add(Dense(32, input_shape=(784,)))

## 上下相等,对于二维层Dense,可以通过如下所示的input_dim指定输入形状##

model = Sequential()
model.add(Dense(32, input_dim=784))

complication 编译

在训练模型之前,您需要配置学习过程,这是通过编译方法完成的。 形式是model.compile(...)
它收到三个参数:

  • 优化器(opyimizer),可以是优化器的字符串标识符,也可以是Optimizer类的实例
  • 损失函数(loss function),模型要将其最小化,可以通过字符串标识符指定,可以通过目标函数指定
  • 指标(metricts)列表, 对于任何分类问题,需要将其设置为metrics = [‘accuracy’]。 度量可以是现有度量的字符串标识符自定义度量函数
# For a multi-class classification problem
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# For a binary classification problem
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# For a mean squared error regression problem
model.compile(optimizer='rmsprop',
              loss='mse')

其实compile函数还可以接受其他参数,此处不以详述。

training 训练

使用fit函数进行训练,示例如下:

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)

fit函数官方定义如下:

fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1)

其中常用的参数:

  • x Numpy训练数据数组(如果模型有单个输入),或Numpy数组列表(如果模型有多个输入)。也可以是已经命名的输入图层的名称。 如果从框架原生张量(例如TensorFlow数据张量)进行馈送,则x可以是None(默认)。
  • y 与x相似,只不过y代表的是目标标签(target label)。可以是:Numpy目标(标签)数据数组(如果模型具有单个输出)或Numpy数组列表(如果模型具有多个输出)或 输入图层的名称 或None.
  • batch_size IntegerNone,代表每个梯度更新的样本数,默认值为32.
  • epochs Integer,模型的训练的 时期数,每个epoch是对x,y的整个迭代。

Model 模型


参考Keras文档:https://keras.io/models/model/


Model 模型是带有函数API的,不是线性的,它是一个可以多输入、多输出的模型。

如下:

model = Model(inputs=a, outputs=b)
model = Model(inputs=[a1, a2], outputs=[b1, b2, b3])
  • 通过inputs 和 outputs 构造多输入(a1,a2)和多输出(b1,b2,b3)的Model

Model 使用方法

与Sequential类似,有compile fit等方法。大致和上述的compile和fit一致。

compile 编译

compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
  • optimizer:优化器
  • loss:损失函数。与Sequential的compile的loss有所不同的是,Model的多个输出可以有多个loss,可以用过一个dict来声明:{'output_a':loss_func_1, 'output_b':loss_func_2}
  • metrics:指标列表。在培训和测试期间由模型评估的度量列表。 通常,您将使用metrics = [‘accuracy’]。 要为多输出模型的不同输出指定不同的度量标准,您还可以传递dict,例如metrics = {‘output_a’:‘accuracy’}。

fit 进行训练

fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1)

x,y,batch_size,epoch都和之前说明的一样。
返回 一个History实例, 其History.history属性是连续时期的训练损失值和度量值的记录,以及验证损失值和验证度量值(如果适用)。

evaluate 函数进行评估

evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None)

返回测试模式下模型的损失值(loss)和度量(metricts)值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234882.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nio和零拷贝_零拷贝

    nio和零拷贝_零拷贝传统IO传统IO的数据拷贝流程如下图:数据需要从磁盘拷贝到内核空间,再从内核空间拷到用户空间(JVM)。程序可能进行数据修改等操作再将数据拷贝到内核空间,内核空间再拷贝到网卡内存,通过网络发送出去(或拷贝到磁盘)。即数据的读写(这里用户空间发到网络也算作写),都至少需要两次拷贝。当然磁盘到内核空间属于DMA拷贝(DMA即直接内存存取,原理是外部设备不通过CPU而直接与系统内存交换……

    2022年9月21日
    2
  • ThingsBoard——Docker重启失败,报错Connection to localhost:5432 refused的解决方法

    ThingsBoard——Docker重启失败,报错Connection to localhost:5432 refused的解决方法一、问题现在还没编译好thingsboard源代码,用的是docker搭建起来的环境。在写自定义节点,要打包好扔到docker里,再重启docker。后来发现经常重启失败,报错的错误也都是这样:2022-03-0508:53:23,164[main]ERRORcom.zaxxer.hikari.pool.HikariPool-HikariPool-1-Exceptionduringpoolinitialization.org.postgresql.util.PSQLExcepti

    2022年6月19日
    60
  • android textwatcher 获取当前控件,android api解析之TextWatcher

    开发android有几年了,但是从来没有整理过,一直是写写写.从今天起开始慢慢整理,总结之处如有错误请指出,谢谢TextWatcher在什么时候会被调用?TextWatcher在edittext内容发生变化时会被调用TextWatcher一共有三个方法beforeTextChanged(CharSequences,intstart,intcount,intafter)在文本变化前调用…

    2022年4月7日
    63
  • python爬虫实战项目,做完直接进阶

    python爬虫实战项目,做完直接进阶

    2021年11月11日
    53
  • 图像处理——Canny算子

    图像处理——Canny算子首先感谢以下两位的渊博知识:(1)爱鱼     https://www.cnblogs.com/mightycode/p/6394810.html(2)mitutao  https://www.cnblogs.com/love6tao/p/5152020.html图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加

    2022年5月30日
    48
  • 憨批的语义分割3——unet模型详解以及训练自己的unet模型(划分斑马线)[通俗易懂]

    憨批的语义分割3——unet模型详解以及训练自己的unet模型(划分斑马线)[通俗易懂]憨批的语义分割3——unet模型详解以及训练自己的unet模型(划分斑马线)学习前言什么是unet模型训练的是什么1、训练文件详解2、LOSS函数的组成训练代码1、文件存放方式2、训练文件3、预测文件训练结果学习前言在这一个BLOG里,我会跟大家讲一下什么是unet模型,以及如何训练自己的unet模型,其训练与上一篇的segnet模型差距不大,但是结构上有一定的差距。什么是unet模型u…

    2022年6月17日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号