——本文仅个人理解向,不具很高的指导意义。
文章是为了实现图像分类与预测
1:获得数据集(已知信息):
即教学中的x。
//物种名称
因为输入的数据是数组,而名称是字符串。我们要构造字典,用数字来表示名称。
dict{名字:数字}
//具体图像
因为已知的每一个文件夹是一个物种,那么我们需要将这些文件的路径和文章名称(标签)建立连续
for 具体某一物种 in os.listdir(所有图像的路径):
if i not in 错误文件:
for 具体某一张 in os.listdir(os.path.join(所有图像的路径, 具体某一物种)):
data_list.append(f'{os.path.join(所有图像的路径, 具体某一物种, 具体某一张)}\t{label_dic[具体某一物种]}\n')
如图所示就实现了路径与标签之间的关系
而吴恩达所讲述里面,数据应该是特征值一样的存在。我们去制作模型就是为了让机器能通过不同的特征值将未知的图像预测出来。(在这里是指输入图片,返回的标签和图片是对应的)
将路径打开获得图像,再对图像做处理获得图像的数据,这些图像数据和标签就是吴恩达中的x.
将x分为训练集和测试集,用训练集获得的假设函数用以测试集验证是否准确。
还可以增加验证集。
2:假设函数:
根据理解,这个模型应该是一个神经网络的形式,我们的假设函数就是很多的激活函数的作用下获得的。
我选择的是:paddle.nn.ReLU() #激活函数
具体这个激活函数在官方的库里有介绍,这里就不多说明。
3:代价函数:
loss=paddle.nn.CrossEntropyLoss(), #指定损失函数
4:关于梯度下降之类的,机械学习去不断更正假设函数里面的参数
parameters=model.parameters()
5:学习率:
learning_rate=0.0001
6:评估:
paddle.metric.Accuracy()) #指定评估方法
输入的数据通过模型算出的标签和实际标签是否相同,大量数据的准确率。通过评估可以去减小我们的学习率。
7:过拟合和正则化:
在评估操作后(学习率改变后)值仍不准确,那就可能是过拟合,可以通过正则化的方式去拟合。
paddle.nn.Dropout(0.2) #正则化
至此已经将所有信息与吴恩达课程所学对应上了。
最后做一下建立模型的总结:
1:获得数据
2:建立模型(可以在已有模型上进行添加和更改,即预训练模式,可以加快模型的实现准确率)
3:优化(改变学习率,正则化……)
4:评估(测试集的准确率,是优化的依据)
5:预测
维度(输出层的数量):label的数量
预测: 先导入模型参数,然后再初始化模型结构,然后将模型参数赋值给初始化好的模型结构。 model_state_dict = paddle.load('./butterfly.pdparams') # 读取模型 model = MyCNN() # 实例化模型 model.set_state_dict(model_state_dict)
数据是x,标签是y。x的数据通过模型(假设函数)得到y的值。得到的值与标签匹配为预测成功。