如何用参数实现当前的pytorch激活函数?

问题描述 投票:0回答:2

我正在寻找一种简单的方法来使用pytorch库中存在的激活函数,但使用某种参数。例如:

Tanh(x / 10)

我想出寻找解决方案的唯一方法是从头开始实现自定义功能。有没有更好/更优雅的方式来做到这一点?

编辑:

我正在寻找一些方法来向我的模型追加函数Tanh(x / 10)而不是简单的Tanh(x)。这是相关的代码块:

    self.model = nn.Sequential()
    for i in range(len(self.layers)-1):
        self.model.add_module("linear_layer_" + str(i), nn.Linear(self.layers[i], self.layers[i + 1]))
        if activations == None:
            self.model.add_module("activation_" + str(i), nn.Tanh())
        else:
            if activations[i] == "T":
                self.model.add_module("activation_" + str(i), nn.Tanh())
            elif activations[i] == "R":
                self.model.add_module("activation_" + str(i), nn.ReLU())
            else:
                #no activation
                pass
python python-3.x pytorch
2个回答
1
投票

您可以在自定义图层中对其进行内联,而不是将其定义为特定函数。

例如,您的解决方案可能如下所示:


import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(4, 10)
        self.fc2 = nn.Linear(10, 3)
        self.fc3 = nn.Softmax()

    def forward(self, x):
        return self.fc3(self.fc2(torch.tanh(self.fc1(x)/10)))

其中torch.tanh(output/10)在模块的前向功能中内联。


0
投票

您可以使用乘法参数创建图层:

import torch
import torch.nn as nn

class CustomTanh(nn.Module):

    #the init method takes the parameter:
    def __init__(self, multiplier):
        self.multiplier = multiplier

    #the forward calls it:
    def forward(self, x):
        x = self.multiplier * x
        return torch.tanh(x)

使用CustomTanh(1/10)而不是nn.Tanh()将其添加到您的模型中。

© www.soinside.com 2019 - 2024. All rights reserved.