使用了flask框架,将python的深度学习算法部署到web网页中。实现了前端与后端的分离。
完善了前后端的一些bug。
改善了代码,提高了后端处理数据的速度。
根据ResNet50网络的结构图,参考开源代码,完成了网络构建,根据已有的10位作家的作品集完成了模型的训练,得到了较好的识别准确率。
神经网络的训练
梯度下降法
学习率:步长更大 = 学习率更高
误差函数不断减小。
如果训练数据过多,无法一次性将所有数据送入计算。
现将数据分成几个部分:batch。
分多个batch,逐一送入计算训练
Epoch
一个epoch,表示:所有的数据送入网络中,完成了一次前向计算+反向传播的过程。
由于一个epoch常常太大,分成几个小的baches.
将所有数据迭代训练一次是不够的,需要反复多次才能拟合、收敛。
在实际训练时、将所有数据分成多个batch,每次送入一部分数据。
使用单个epoch更新权重不够。
随着epoch数量的增加,权重更新迭代的次数增多,曲线从最开始的不拟合状态,进入优化拟合状态,最终进入过拟合。
epoch如何设置:大小与数据集的多样化程度有关,多样化程度越强,epoch越大。
batchsize
每个batch中:训练样本的数量。
batch size大小的选择也很重要,最优化网络模型的性能+速度。
当数据量较小,计算机可以承载只有1个batch的训练方式时, 收敛效果会好。
mini-batch:将所有数据分为若干个batch,每个batch包含一部分训练样本。
iterations
完成一次epoch需要的batch个数
batch numbers就是iterations.
分为了多少个batch? : 数据总数/batch_size
训练10轮之后的结果:
近一段时间由于自己身体的原因修养了很久,进度有所拖延,但是在近期恢复的过程中也逐渐赶上了大家的进度。前端的部署和设计已经完成。
检查flask框架中有没有Bug,同时测试一下数据由前端传递给后端后对识别准确率有没有影响。
不断调参,提高准确率
在细节方面还在逐渐修改,比如网页部分滚动条的设计以及部分区域显示效果不太好,在积极努力的调整,还有一些地方的交互感觉不太合理。同时准备应对不同的情况如果有时间的话打算多细化设计一下前端的显示以求达到最佳的使用效果。
当前采用的网络准确率在85%-90%之间,似乎并不够高
目前比较大的问题就是在前后端的结合上,如何让我们的网页和相关功能的实现完美的结合,同时让用户使用方便。
了解了flask框架的使用。
熟悉了前后端分离的概念。
拥有了改进代码、调试bug的一些经验。
深入了解了resnet50网络模型的结构并根据资料进行了模型组网,完成了网络的实现并得到了不错的识别准确率,也了解了许多其他网络模型,包括一些复杂网络,如densenet201。通过这次实验,我对神经网络模型尤其是经典的resnet50有了较好地理解。
代码:(网络模型)
#卷积层2(包括卷积,池化,激活)
layer_conv2 = create_convolutional_layer(input=layer_conv1,
num_input_channels=num_filters_conv1,
conv_filter_size=filter_size_conv2,
num_filters=num_filters_conv2)
#卷积层3(包括卷积,池化,激活)
layer_conv3= create_convolutional_layer(input=layer_conv2,
num_input_channels=num_filters_conv2,
conv_filter_size=filter_size_conv3,
num_filters=num_filters_conv3)
#把上面三个卷积层处理后的结果转化为一维向量,提供给全连层
layer_flat = create_flatten_layer(layer_conv3)
#全连接层1
layer_fc1 = create_fc_layer(input=layer_flat,
num_inputs=layer_flat.get_shape()[1:4].num_elements(),
num_outputs=fc_layer_size,
use_relu=True)
#全连接层2
layer_fc2 = create_fc_layer(input=layer_fc1,
num_inputs=fc_layer_size,
num_outputs=num_classes,
use_relu=False)