pytorch - CNN forward 函数,AutoTuning 层数
问题描述
class ConvolutionalNetwork(nn.Module):
def __init__(self, in_features, trial):
# we optimize the number of layers, hidden units and dropout ratio in each layer.
n_layers = self.trial.suggest_int("n_layers", 1, 5)
p = self.trial.suggest_uniform("dropout_1{}".format(i), 0, 1.0)
layers = []
for i in range(n_layers):
self.out_features = self.trial.suggest_int("n_units_1{}".format(i), 16, 160,step =2)
kernel_size = trial.suggest_int('kernel_size', 2, 7)
layers.append(nn.Conv1d(1, self.out_features,kernel_size,1))
layers.append(nn.RReLU())
layers.append(nn.BatchNorm1d(self.out_features)
layers.append(nn.Dropout(p))
self.in_features = self.out_features
layers.append(nn.Conv1d(self.in_features, 16,kernel_size,1))
layers.append(nn.RReLU())
return nn.Sequential(*layers)
正如您在上面看到的,我对参数进行了一些 Optuna 调整,包括调整层数。
def forward(self,x):
# shape x for conv 1d op
x = x.view(-1, 1, self.in_features)
x = self.conv1(x)
x = F.rrelu(x)
x = F.max_pool1d(x, 64, 64)
x = self.conv2(x)
x = F.rrelu(x)
x = F.max_pool1d(x, 64, 64)
x = x.view(-1, self.n_conv)
x = self.dp(x)
x = self.fc3(x)
x = F.log_softmax(x, dim=1)
return x
我现在需要对上面的 forward 函数做同样的事情,我做了下面的伪代码,但它不会运行,请告知如何。主要问题是将 for 循环函数合并到 forward 函数中。
def forward(self,x):
# shape x for conv 1d op
x = x.view(-1, 1, self.in_features)
for i in range(n_layers):
layers.append(self.conv1(x))
layers.append(F.rrelu(x))
layers.append(F.max_pool1d(x, 64, 64))
x = x.view(-1, self.n_conv)
x = self.dp(x)
x = self.fc3(x)
#x = F.sigmoid(x)
x = F.log_softmax(x, dim=1)
return x
解决方案
有一堆错误使您难以理解您打算做什么:
- 你为什么要在 中建立一个
nn.Sequential
模型__init__
而不使用它? - 这个
return
指令是什么__init__
?? - 您创建的连续卷积层没有匹配的通道大小(
in_channels
始终为 1)。一次迭代的out_feature
应该是in_features
下一次迭代的 - 您的函数伪代码
forward
将张量附加到layers
列表中(顺便说一句,您没有声明),然后不使用该列表。 - 在 开始时
forward
,您使用 重塑输入x = x.view(-1, 1, self.in_features)
,但此时in_features
与第一个卷积层的输入通道数完全不匹配。
长话短说:纠正以上所有错误,然后是:
class ConvolutionalNetwork(nn.Module):
def __init__(self, in_features, trial):
# do your stuff here ...
self._model = nn.Sequential(*layers)
def forward(self, x):
return self._model(x)
应该管用
推荐阅读
- javascript - 如何监听标签更改的标题?
- ruby-on-rails - link_to 嵌套资源路由找不到 ID
- c++ - c++ SDL2 固定更新动作
- sql - 显示 1 列的记录比较 2 列的结果
- swift - 为 iOS 自定义 AWS Amplify 身份验证 UI
- android - Android - 使用 Groupie 库过滤列表
- mysql - 如何从视图的列是 IFNULL(1/0, 0) 的视图中插入表?
- php - $_POST 在 codeigniter 中为空
- bash - 让 bash 从 .txt 文件中输出某个单词
- intellij-idea - 错误:无法在 IntelliJ 中找到或加载主类 MainKt