使用Kreas搭建神经网络相对来说轻松一些,总结一下Keras的基本用法,为后续学习tensorflow打好基础。
Keras中文文档https://keras-cn.readthedocs.io/en/latest/
Sequential模型(顺序模型)
#导入顺序模型
from keras.models import Sequential
model = Sequential()
#dense层(标准一维全连接层)第一层需要指定输入形状,以对接输入数据的形状,比如以(16,)对接(*,16)形状的数据
from keras.layers import Dense, Activation
model.add(Dense(units=64, input_dim=100))#第一层,64个神经元,输入维度10
model.add(Activation("relu"))
model.add(Dense(units=10))
model.add(Activation("softmax"))
#以准确度作为度量标准
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
#学习率0.9,动量法,使用Nesterov梯度下降
from keras.optimizers import SGD
model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))
#model.fit训练网络,epochs训练轮数,size训练batch大小
model.fit(x_train, y_train, epochs=5, batch_size=32)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
#使用模型进行预测
classes = model.predict(x_test, batch_size=128)
简单的keras神经网络搭建完成。
dense层介绍
keras.layers.Dense(units,
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None)
units:该层有几个神经元
activation:该层使用的激活函数
use_bias:是否添加偏置项
kernel_initializer:权重初始化方法
bias_initializer:偏置值初始化方法
kernel_regularizer:权重规范化函数
bias_regularizer:偏置值规范化方法
activity_regularizer:输出的规范化方法
kernel_constraint:权重变化限制函数
bias_constraint:偏置值变化限制函数
Keras中启用tensorboard
# 编译模型 评价函数和损失函数相似,不过评价函数的结果不会用于训练过程中
model.compile(optimizer='Adam', loss='categorical_crossentropy',
metrics=['accuracy'])
# TensorBoard调用查看一下训练情况
# tb_cb = TensorBoard(log_dir='logs')
tb_cb = TensorBoard(log_dir='logs',histogram_freq=1,
write_graph=True,
write_images=True)
# 开始模型训练
model.fit(x=x_train, y=y_train, batch_size=batch_size, epochs=epochs,
verbose=1, validation_data=(x_valid, y_valid), shuffle=True,
callbacks=[tb_cb])
然后,在anaconda promot中定位到程序所在文件夹,输入
tensorboard --logdir=logs/
之后会显示一个网址,复制进入微软自带浏览器即可打开tensorboard(虽然我看不懂==)
Conv1D层
keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=1,
activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros',
kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None)
一维卷积层(即时域卷积),用以在一维输入信号上进行邻域滤波。当使用该层作为首层时,需要提供关键字参数input_shape。例如(10,128)代表一个长为10的序列,序列中每个信号为128向量。而(None, 128)代表变长的128维向量序列。
该层生成将输入信号与卷积核按照单一的空域(或时域)方向进行卷积。如果use_bias=True,则还会加上一个偏置项,若activation不为None,则输出为经过激活函数的输出。
参数
filters:卷积核的数目(即输出的维度)
kernel_size:整数或由单个整数构成的list/tuple,卷积核的空域或时域窗长度
strides:整数或由单个整数构成的list/tuple,为卷积的步长。任何不为1的strides均与任何不为1的dilation_rate均不兼容
padding:补0策略,为“valid”, “same” 或“causal”,“causal”将产生因果(膨胀的)卷积,即output[t]不依赖于input[t+1:]。当对不能违反时间顺序的时序信号建模时有用。参考WaveNet: A Generative Model for Raw Audio, section 2.1.。“valid”代表只进行有效的卷积,即对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。
activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
dilation_rate:整数或由单个整数构成的list/tuple,指定dilated convolution中的膨胀比例。任何不为1的dilation_rate均与任何不为1的strides均不兼容。
use_bias:布尔值,是否使用偏置项
kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
kernel_regularizer:施加在权重上的正则项,为Regularizer对象
bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象
activity_regularizer:施加在输出上的正则项,为Regularizer对象
kernel_constraints:施加在权重上的约束项,为Constraints对象
bias_constraints:施加在偏置上的约束项,为Constraints对象
输入shape
形如(samples,steps,input_dim)的3D张量
输出shape
形如(samples,new_steps,nb_filter)的3D张量,因为有向量填充的原因,steps
的值会改变
【Tips】可以将Convolution1D看作Convolution2D的快捷版,对例子中(10,32)的信号进行1D卷积相当于对其进行卷积核为(filter_length, 32)的2D卷积。