conv-neural-network - 在 Pytorch 中构建 CNN 时,元组对象不可调用
问题描述
我是神经网络的新手,目前正在尝试构建一个具有 2 个卷积层的 CNN。
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(in_channels = 1, out_channels = 16, kernel_size = 3, stride = 1, padding = 1),
self.maxp1 = nn.MaxPool2d(2),
self.conv2 = nn.Conv2d(in_channels = 16, out_channels = 16, kernel_size = 3, stride = 1, padding = 1),
self.fc1 = nn.Linear(16, 64),
self.fc2 = nn.Linear(64, 10)
def forward(self, x):
x = nn.ReLU(self.maxp1(self.conv1(x)))
x = nn.ReLU(self.maxp2(self.conv1(x)))
x = x.view(x.size(0), -1)
x = nn.ReLu(self.fc1(x))
return self.fc2
我想做的是 ConvLayer- ReLu 激活 - Max Pooling 2x2 - ConvLayer - ReLu 激活 - 展平层 - 完全连接 - ReLu - 完全连接
然而,这让TypeError: 'tuple' object is not callable
我x = nn.ReLU(self.maxp1(self.conv1(x)))
我怎样才能解决这个问题?
解决方案
您可以更改
nn.ReLU
为F.relu
.
如果你想使用nn.ReLU()
,你最好将它声明为__init__
方法的一部分,然后在后面调用它forward()
:
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(in_channels = 1, out_channels = 16, kernel_size = 3, stride = 1, padding = 1),
self.maxp1 = nn.MaxPool2d(2),
self.conv2 = nn.Conv2d(in_channels = 16, out_channels = 16, kernel_size = 3, stride = 1, padding = 1),
self.fc1 = nn.Linear(16, 64),
self.fc2 = nn.Linear(64, 10)
self.relu = nn.ReLU(inplace=True)
def forward(self, x):
x = self.relu(self.maxp1(self.conv1(x)))
x = self.relu(self.maxp2(self.conv1(x)))
x = x.view(x.size(0), -1)
x = self.relu(self.fc1(x))
return self.fc2
推荐阅读
- azure - 在 Docker 容器中使用 Redis 的 Flask 应用程序在 Azure 部署中失败(在本地工作):连接到 redis:6379 时出现错误 -2。名称或服务未知
- javascript - 将图像源传递到 Vue.js 中的作用域插槽
- machine-learning - 尽管学习率很小,但训练损失会随着时间的推移而增加
- swift - UITableCellView 自动调整大小以填满整个屏幕
- c# - 如何使用硒等到下拉选择的选项更改?
- firebase - Flutter 可以每毫秒左右记录一次新帧吗?
- c - 使用原始套接字发送,IPv4 本机数据包
- typescript - 如何使用泛型接口来增强具有附加值类型的现有接口?
- matlab - 从类访问工作区变量
- python - Pandas/python 在一列列表中加入/合并两个数据框