大家好,又见面了,我是你们的朋友全栈君。
Keras Model模型
- Keras 中文文档
- Keras 模型
- Sequential 顺序模型
- Sequential使用方法
- 一个简单的Sequential示例
- 构建方法
- input shape 输入的形状(格式)
- complication 编译
- training 训练
- Sequential使用方法
- Model 模型
- Model 使用方法
- compile 编译
- fit 进行训练
- evaluate 函数进行评估
- Model 使用方法
- Sequential 顺序模型
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示例
代码语言:javascript复制from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
从上述代码中可以看出:
from keras.models import Sequential
引入Sequentialmodel = Sequential([...])
则开始构建model- 其中,Dense是一个全连接层,它的激活函数默认为是linear线性函数
- 激活函数可以通过 单独的激活层 实现,也可以通过 构建层时传递activation实现,这就是说:
model.add(Dense(64))
model.add(Activation('tanh'))
等价于
代码语言:javascript复制model.add(Dense(64, activation='tanh'))
构建方法
除了上面代码的:
代码语言:javascript复制model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
还可以简单的写为:
代码语言:javascript复制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_dim
和input_length
来描述输入型状。 - 参数
input_shape
通过tuple的形式,指定输入形状。 - 参数
batch_size
可以指定固定批量大小。
batch_size=32
input_shape=(6, 8)
= (32, 6, 8)
示例:
代码语言:javascript复制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函数官方定义如下:
代码语言:javascript复制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
Integer
或None
,代表每个梯度更新的样本数,默认值为32. - epochs
Integer
,模型的训练的 时期数,每个epoch是对x,y的整个迭代。
Model 模型
参考Keras文档:https://keras.io/models/model/
Model 模型是带有函数API的,不是线性的,它是一个可以多输入、多输出的模型。
如下:
代码语言:javascript复制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 编译
代码语言:javascript复制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 进行训练
代码语言:javascript复制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 函数进行评估
代码语言:javascript复制evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None)
返回测试模式下模型的损失值(loss)和度量(metricts)值。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/234882.html原文链接:https://javaforall.cn