如题,我想从Keras转到Pytorch进行学习,想训练一个神经网络,输入图像的大小为28x28(其实就是MNIST)
以下是我的神经网络代码:
self.conv1 = nn.Conv2d(in_channels=1,out_channels=16,kernel_size=3,stride=1,padding=1)
self.pool1 = nn.MaxPool2d(kernel_size=2,stride=2)
self.relu1 = nn.ReLU()
self.norm1 = nn.BatchNorm2d(16)
self.conv2 = nn.Conv2d(in_channels=16,out_channels=32,kernel_size=3,stride=1,padding=1)
self.pool2 = nn.MaxPool2d(kernel_size=2,stride=2)
self.relu2 = nn.ReLU()
self.norm2 = nn.BatchNorm2d(32)
self.fc1 = nn.Linear(64*3*3,128)
self.softmax = nn.Softmax(dim=1)
self.fc2 = nn.Linear(128,10)
但是PytorchLightning报错:
RuntimeError: mat1 and mat2 shapes cannot be multiplied (64x1568 and 576x128)
我是真的发自内心的想问什么这里矩阵的计算会报错,以前在Keras上只需要设置好输入和输出,剩下的完全不需要操心,但是自从转Pytorch之后就是各种奇怪的问题,实话实说有点劝退了,太麻烦了。
跟个人使用习惯有关,我也更倾向keras,代码提示输出张量大小与当前层的权重张量大小不匹配,这个得你自己检查前一层的输出张量大小了
我第一次听到有人说pytorch难用的。。。。你是没遇到过tf和keras版本问题的毒打才会有这个疑问,小版本库不一样就报错,具体报错你还无法确定是哪个库的那种,只有全部安装对应的库才行,然后老项目都是tf1.x的,30系之后的显卡无法支持tf1.x,只能安装2.x的版本你就知道什么叫版本控制一堆shit,等你后面项目经历多了,你就知道pytorch多香了。
另外说回你上面的问题,你这个是在nn.Linear这一层的问题,也就是你这个层的输入结果是64x1567,但是你的设置的输入是576x128,这两个对不上肯定不行啊。从你的输入1x1x28x28的·结果来看,你在进入全连接层的输出是nx32x7x7,并非你想要的nx64x3x3
本文利用pytorch训练一个自定义的分类器,来对自己的图片数据集进行分类。神经网络的自定义包括网络结构的设计,网络层次各个参数的设计,如激励函数,卷积层数量,卷积核等参数。数据集的自定义是指用户可以设计自己的待分类图像,并且按照自己的意愿将其进行分类。如果你完全熟悉并且完成了本文的操作,那么你将可以完全依靠自己来设计一个图像分类的任务。