笔记来源于matlab官网,不足之处还请提出.。
2 transfer learning

要执行迁移学习,您需要创建三个组件:
1. 代表网络体系结构的一系列图层。 对于迁移学习,这是通过修改先前存在的网络(如AlexNet)创建的。
2. 已知标签的图像可用作训练数据。 这通常作为数据存储提供。
3. 包含控制训练算法行为的选项的变量。
这三个组件作为trainNetwork功能的输入提供,它将经过训练的网络作为输出返回。
您应该测试新接受训练的网络的性能。 如果不够,通常你应该尝试调整一些训练选项并重新训练。
2.1数据准备

训练所要的标签可以存储在Labels属性中,默认为空,通过指定‘LabelSource'选项自动确认文件夹名称中的标签。重新创建数据存储区flwrds到存储在变量中的文件夹路径的子文件夹中的所有图像pathToImages(为指定的文件夹,已经存在工作区中),使用文件夹名称作为图像标签:
flwrds = imageDatastore(pathToImages,'IncludeSubfolders',true,'LabelSource','foldernames')

通过Labels属性来提取标签:
flowernames = flwrds.Labels;

可以使用splitEachLabel函数将数据存储区中的图像分成两个单独的数据存储区。
[ds1 ,ds2 ] = splitEachLabel(imds , p);
比例p(0到1之间的一个值)表示imds应该包含来自其中的每个标签的图像的比例ds1,剩下的文件被分配给ds2,如将flwrds中60%分配给flwrTrain,剩下个40%分配给flwrTest:
[flwrTrain , flwrTest] = splitEachLabel(flwrds , 0.6);
splictEachLabel默认是按顺序划分的,可以添加选项‘randomized'来进行随机划分:
[flwrTrain,flwrTest] = splitEachLabel(flwrds,0.8,'randomized');

当p值为0到1时,它被解释为一个比例。然后分割图像,以便每个标签按比例分割。您也可以指定要从每个要分配的标签中获取的确切数量的文件ds1:
[ds1 , ds2 ] =splitEachLabel(imds , n);
这确保了每个标签都ds1具有n图像,即使类别不全都包含相同数量的图像。
网友评论