基于我暑假内学习的深度学习理论知识,我的学长建议我仿照他所设计的猫狗大战模型来尝试运用tensorflow与keras搭建神经网络,虽然我对python并不是很了解,但我依旧愿意尝试搭建来提升自己的水平。
我学长的文章:深度学习系列笔记——贰 (基于Tensorflow Keras搭建的猫狗大战模型 一)
深度学习系列笔记——贰 (基于Tensorflow Keras搭建的猫狗大战模型 二)
深度学习系列笔记——贰 (基于Tensorflow2 Keras搭建的猫狗大战模型 三)
python模型训练, 猫狗大战是著名的竞赛网站kaggle几年前的一个比赛,参赛者得到猫狗各12500张图片,作为训练集,另外还会得到12500张猫和狗的图片,作为验证。最后提交结果至kaggle平台,获得评测分数。具体介绍请自行查询,在此不多赘述。
本文基于python3.7,tensorflow2.2.0cpu版本,以pycharm作为IDE在win10下运行。
在搭建网络之前我收到了数据集,其中test文件夹含有12500张猫狗不分图片,train文件夹含有猫狗各12500张图片,在学长建议下,我将train文件夹里的猫狗各自合并成新的文件夹,并且从其中分别取出猫狗图片各1000张左右作为validation文件夹(即设置验证集)来检验模型对于未训练过的例子是否有很好的鲁棒性。
观察图片后发现图片大小为500*500,由于我采用的是cpu版本(GPU版本经尝试安装后无法使用),模型训练的速度会比较慢,所以我打算将其缩小至大约200*200,以便在保证一定精度的情况下能更快训练完成。
在吴恩达老师的深度学习教程中我了解到数据增强的方法,即通过对图片的镜像处理,颜色RGB的改变或对图片的旋转和适当裁剪来增加图片数量,从而让神经网络能更好地对图片进行学习,这个方法在我的学长的文章中也有所提到。
动物运动模型? 训练采用的是tf.keras.models.Sequential,这是一种类似于搭积木的方式进行的搭建的神经网络,对初学者更为友善。
程序内部利用history设置了实时训练过程的记录以及最后训练结果的反馈,同时设置了检查点以便模型的存储与重新载入,有利于我们在调试过程中更换优化器,选择不同的优化方案。同时设置了断点续训练,便于调试与多次训练。
"""
此处设置断点续训练的功能,当模型较大时,可能需要很多次训练才能达到较为不错的结果,因此这里添加此功能,便于调试和多次训练
"""
#设置检查点,使得模型可以存储和重新载入,需要提前创建出checkpoint文件夹作为模型保存的路径,根据实际需求也可以设置为其他的文件夹
checkpoint_save_path = "./checkpoint/demo_function_model.ckpt"
if os.path.exists(checkpoint_save_path + '.index'):print('-------------load the model-----------------')model.load_weights(checkpoint_save_path)#如果检查点存在,则导入上一次训练得到的模型的权重,只载入权重,可以方便我们在调试过程中更换优化器,选择不同的优化方案#这里设置
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=True,save_best_only=True)
在逐步比照程序后,我进行了初步的训练,大约3h后我第一次训练结束。最后发现我的训练集与验证集准确度均只有50%左右,但训练曲线近似为一条直线,我了解到这种情况是正常的,便继续进行训练。
在之后训练过程中,我发现我的验证集精度与损失曲线均有比较大的波动,在询问过学长后得知这种状况是因为我们的图像精度较高导致曲线细小的波动显现的比较大,其实是正常的现象。
大概长这样
模型搭建、 在经过大概5-6次训练后我的模型准确度终于到达了92%左右,损失曲线也降至了20%以下。在使用代码保存完模型后,我开始准备进行模型的推理,但我寻找了很久依旧没有找到保存下来的模型,相关文件只有在checkpoint里存在的后缀为.ckpt的过程模型。开始我以为是程序加载模型的问题,于是我在网上查找后将代码
model = tf.keras.models.load_model('D/pythonProject1/checkpoint/demo_function_model')
改为了
model = tf.train.get_checkpoint_state('D/pythonProject1/checkpoint/demo_function_model')
虽然不知道为什么加载进去了,但之后依旧出现了bug
最后在网上寻找了很久类似的处理方法依旧不行。
在询问过学长后,他告诉我这样的原因是我模型的加载出了问题,建议我去调试一下pycharm。调试后无果我被迫放弃了模型的推理。
建立模型法, 这次模型搭建虽然失败了,但我确实了解到了很多单学习理论所不知道的知识,也知道了很多debug的方法,希望后续经过学习后我能成功搭建一个自己的模型。
最近重新看代码发现我好像在保存模型时将保存用的代码误关闭了导致只有中间文件。各位请千万不要学我犯这样的错误。
如果上述总结哪里有错误的还请提出,我将虚心接受。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态