多层全连接神经网络
- 每层神经元个数、神经网络层数、激活函数等可自由修改
- 使用不同的损失函数可适用于其他任务,比如:分类问题
- 这是Keras搭建神经网络模型最基础的方法之一,Keras还有其他进阶的方法,官网给出了一些基本使用方法:Keras官网
# 这里搭建了一个4层全连接神经网络(不算输入层),传入函数以及函数内部的参数均可自由修改
def ann(X, y):
'''
X: 输入的训练集数据
y: 训练集对应的标签
'''
'''初始化模型'''
# 首先定义了一个顺序模型作为框架,然后往这个框架里面添加网络层
# 这是最基础搭建神经网络的方法之一
model = Sequential()
'''开始添加网络层'''
# Dense表示全连接层,第一层需要我们提供输入的维度 input_shape
# Activation表示每层的激活函数,可以传入预定义的激活函数,也可以传入符合接口规则的其他高级激活函数
model.add(Dense(64, input_shape=(X.shape[1],)))
model.add(Activation('sigmoid'))
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dense(256))
model.add(Activation('tanh'))
model.add(Dense(32))
model.add(Activation('tanh'))
# 输出层,输出的维度大小由具体任务而定
# 这里是一维输出的回归问题
model.add(Dense(1))
model.add(Activation('linear'))
'''模型编译'''
# optimizer表示优化器(可自由选择),loss表示使用哪一种
model.compile(optimizer='rmsprop', loss='mean_squared_error')
# 自定义学习率,也可以使用原始的基础学习率
reduce_lr = ReduceLROnPlateau(monitor='loss', factor=0.1, patience=10,
verbose=0, mode='auto', min_delta=0.001,
cooldown=0, min_lr=0)
'''模型训练'''
# 这里的模型也可以先从函数返回后,再进行训练
# epochs表示训练的轮数,batch_size表示每次训练的样本数量(小批量学习),validation_split表示用作验证集的训练数据的比例
# callbacks表示回调函数的集合,用于模型训练时查看模型的内在状态和统计数据,相应的回调函数方法会在各自的阶段被调用
# verbose表示输出的详细程度,值越大输出越详细
model.fit(X, y, epochs=100,
batch_size=50, validation_split=0.0,
callbacks=[reduce_lr],
verbose=0)
# 打印模型结构
print(model.summary())
return model
下图是此模型的结构图,其中下划线后面的数字是根据调用次数而定