当前位置:网站首页 > R语言数据分析 > 正文

resnet50预训练模型(resnet50预训练模型代码)



  本文介绍基于Python语言中TensorFlow的接口,实现深度学习神经网络回归的具体方法。

  1. 本文介绍的是基于TensorFlow 接口的深度学习网络,而非TensorFlow 中常用的接口;关于接口实现深度学习回归,我们会在后续博客中介绍。

  2. 本文代码以回归为例;而由于基于 接口的深度学习回归分类整体较为类似,因此二者具有触类旁通的效果。。

  3. 本文第二部分为代码的分解介绍,第三部分为完整代码。

  首先需要引入相关的库与包。

  其次,基于TensorFlow的代码往往会输出较多的日志信息,从而使得我们对代码执行情况的了解受到一定影响。代码输出的日志信息有四种,依据严重程度由低到高排序:(通知)<(警告)<(错误)<(致命的);我们可以通过如下代码来对TensorFlow的输出日志信息加以约束。

  其中,代表只输出信息。但要注意,这句代码需要放在的前面:

  深度学习代码一大特点即为具有较多的参数需要我们手动定义。为避免调参时上下翻找,我们可以将主要的参数集中在一起,方便我们后期调整。

  其中,具体参数的含义在本文后续部分详细介绍。

  每执行一次,便会在指定路径中保存当前运行的模型。为保证下一次模型保存时不受上一次模型运行结果干扰,我们可以将模型文件夹内的全部文件删除。

  需要注意,以上代码仅删除指定路径下的文件,文件夹不删除。大家如果需要将文件夹也同时删除,修改以上代码函数中的后面几句即可。

  我的数据已经保存在了文件中,因此可以用直接读取。

  其中,数据的每一列是一个特征,每一行是全部特征与因变量(就是下面的)组合成的样本。

  就是一个桥梁,联系你的初始数据与模型;其好比一个名单,模型拿着这个名单到你的数据(即本文2.4部分你导入的数据)中按列的名称一一搜索,若初始数据中的某列名称在里,那么模型就会把初始数据中这一列的数据全部拿到自己这里,进行训练。

  因为我们是希望导入数据的全部特征,那么可以直接在全部数据的自变量中循环,将全部特征的名称导入。

  在这里需要注意的是,只有连续数值变量才可以用处理。

  模型优化方法即模型中的,其可以在模型结构构建时输入;但有时优化方法较为复杂(例如引入了学习率下降),那么在构建模型时配置优化方法的话就会有些不方便。因此我们首先构建模型优化方法。

  以上代码中有两个,第一个是直接输入优化方法的名称即可,名称包括:, , , , ;默认为。

  第二个是在选择了优化方法的基础上,配置其他信息。例如第二个,其代表着学习率指数下降的Adam优化方法。其中,可视作一个计算每次训练学习率的函数,他返回的是每一次对应的学习率。可能这么说不太好理解,看这个公式:其返回值为,是不是就明白啦。

  我们选择第二个优化方法,因此把第一个注释掉。

  随后,我们定义模型的结构。

  模型的构建,对照着代码上的注释,就比较好理解了;其中,我把注释掉,是因为可能由于TensorFlow版本的问题,其总是报错,所以就用默认的值就好;而最后一个,决定了是否进行Batch NormalizingBatch Normalizing可以保持深度神经网络在每一层保持相同分布,从而加快网络收敛与增强网络稳固性。

  训练模型这一部分,我认为反而比模型的构建可能还难理解一些。我们先看代码:

  我们可以这么理解:在函数中,只有一个参数;而这个参数的输入,又是一个新的函数——这个新的函数就是大名鼎鼎的了。

  他长这个样子:

  那我们首先就看——也就是代码中的函数。其实这个函数的用处很简单,用官网的话说,其就是用来输入模型支持的数据类型的——只有经过处理后,数据才可以被识别。听上去这么厉害,它到底是如何操作的呢?

  很简单,它只需要将初始的数据转换为特定的格式即可,这个格式是一个元组(),这个元组有两个元素:

  一就是,是一个字典。这个字典的每一个键是每一个特征的名称,就比如用植物特性对花的种类加以区分,那么花的“叶长”“叶片厚度”等等就是一个个特征的名称,也就是这里的一个个“键”;而这个字典的值,就是这个特征对应的全部样本的数值组成的数组。

  二就是,是全部样本对应的,也就是因变量。

  不知道大家有没有理解,我们就举一个简单的例子。假如我们用两个地方的温度与降水预测这两个地方的作物产量:其温度分别为10 ℃、20 ℃,降水分别为15 mm,25 mm,作物产量分别为100千克每公顷,150千克每公顷——那么由两个部分组成:

  怎么样,是不是明白啦。

  理解了之后,我们继续看函数。首先,用来将输入的数据加载并转换为的形式;随后,如果是训练状态下,那么数据会进行打乱——相当于对数据加以洗牌,防止初始数据具有一定的趋势。例如如果我们做分类,其中初始数据的前80%都是第一类,后20%都是第二类,那么如果我们不打乱数据,会使得用前80%数据训练出来的结果都是第一类(即模型只认识第一类),在后20%进行测试时,所得结果也全都为第一类;所以要打乱。其中的是参数,这个数据必须要比你的数据样本个数大。至于这个函数的原理我一直没有搞明白,大家感兴趣的话可以进一步了解。

  则是对数据集加以重复,之所以要重复,是因为我们需要对全部数据训练好几轮(即好几个),因此要对初始数据加以重复。

  随后,用函数输出个数据,也就是一批数据;其中就是每一批数据的个数。

  这个就是函数。再看函数函数:大家也看出来了,这个函数是每次输出一批(个)数据;而我们训练的时候,肯定是要一批一批不停输入数据的,因此这就解释了为什么函数前有一个——因为函数要把处理后的数据分多次传给。

  理解了以上内容,接下来就好理解多了。我们需要进行验证与测试的操作——其实验证也就是利用了测试集数据,之所以我还进行了测试,是因为希望可以获取测试集预测结果,从而更直观地了解模型精度水平。

  其中,验证时所用的函数其实和训练集所用的是一样的函数,只不过验证时不需要进行打乱和重复操作;而测试时的函数则是新的,其只需要输入自变量、无需输入因变量。

  精度评定与拟合图像就不用过多说啦~最终,我们最好将模型参数与精度衡量指标结果保存在Excel表格中,这样子方便之后的调参过程。这里就不再一一介绍啦,大家对照代码中的注释即可。

  至此,全部的代码分解介绍都结束啦~

  至此,大功告成。

到此这篇resnet50预训练模型(resnet50预训练模型代码)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • oracle 从入门到精通(Oracle从入门到精通(第5版)下载)2025-09-23 20:36:08
  • ewma模型和garch(ewma模型和garch的区别)2025-09-23 20:36:08
  • swagger对比(swagger和swagger2)2025-09-23 20:36:08
  • fairseq教程(fairness)2025-09-23 20:36:08
  • pass around服务(pass层服务)2025-09-23 20:36:08
  • ip15promax价格(ip15promax价格512g)2025-09-23 20:36:08
  • redhat linux最新版本(redhat linux操作系统)2025-09-23 20:36:08
  • yarn装包(yarn发布包)2025-09-23 20:36:08
  • pointrcnn代码(pointrend代码)2025-09-23 20:36:08
  • ldrb指令什么意思(ldrneb指令)2025-09-23 20:36:08
  • 全屏图片