1.先看看识别效果:
这个程序识别的是0~9的一组手写数字,这是最终的识别效果,为1,代表识别成功,0为失败。
然后数据源是:ds = deeplake.load('hub://activeloop/optical-handwritten-digits-train')里面是一组压缩存储的32*32 bits 0-1点阵,内容是0~9的数字的手写数据。我训练了150次,最终达到的效果。
模型非常简单:
x = self.conv1(x)
x = self.relu(x)
x = self.conv2(x)
x = self.relu(x)
x = self.pool2d(x)
#x = self.drop(x)
x = x.view(-1)
x = self.fc1(x)
x = self.relu(x)
x=self.fc2(x)
其中两级卷积层,然后是一个池化层,然后是两组连接层映射,最终到达一组prob数据,它是一个长度10的向量,相当于一个分类识别的概率结果。
现在,我大概也能处理yolo那组数据集,会慢,准确率和效率可能都不高,但是我能利用这种手工搭建模型的机制做成。这个模型和yolo的目标基本一致,yolo多了多目标识别,最终链接层的output会更复杂。
这个任务数据量不大,容易处理。训练速度很快,这一次的代码,基本上完全是自己写的。160行。工程上用到的一些信号分析类学习任务,大多与此规模相当,只是标注、训练。
最终的模型参数大小我没有看,待会儿可以输出看一下。
2.源码:
GitCode - 全球开发者的开源社区,开源代码托管平台