PyTorch相同输入不同输出非随机

如何解决PyTorch相同输入不同输出非随机

我有一个经过训练的模型,并且正在通过运行它进行测试(在.eval()模式下)。

以下是我在调试器中执行的确切行和顺序:

(Pdb) p feature
tensor([[[ -4.0563,-3.8415,-3.9542,...,-14.8424,-14.9201,-14.8960],[ -5.8481,-2.0405,-2.4438,-19.6938,-19.4901,-19.9180],[ -5.2424,-1.2804,-1.5109,-19.3892,-19.4397,-19.5012],[ -6.4756,-2.0376,-2.0894,-20.0942,-19.9635,-19.8762],[ -6.5087,-2.0452,-1.9018,-19.7127,-19.8574,-20.0103],[ -7.0725,-4.2817,-3.3231,-16.7170,-16.9004,-17.0333]]])
(Pdb) p feature2
tensor([[[ -4.0563,-17.0333]]])
(Pdb) torch.all(feature == feature2)
tensor(True)
(Pdb) prediction_tag,prediction_time = model(feature)
(Pdb) prediction_tag2,prediction_time2 = model(feature2)
(Pdb) prediction_time 
tensor([[[9.6584e-06,3.9059e-05,4.0984e-06,1.7644e-04,1.0589e-02,4.4167e-06],[9.6584e-06,[9.3993e-06,3.7754e-05,3.9786e-06,1.7362e-04,1.0243e-02,4.2382e-06],[7.8885e-06,1.1077e-05,3.8594e-06,1.9443e-04,3.8032e-03,6.6878e-06],[8.0696e-06,1.1217e-05,3.9580e-06,2.0004e-04,3.7598e-03,6.8072e-06],6.8072e-06]]])
(Pdb) p prediction_time2
tensor([[[8.0289e-07,2.0557e-05,2.5803e-05,3.3225e-04,4.4547e-03,8.4192e-06],[8.0289e-07,[7.6509e-07,1.9805e-05,2.4918e-05,3.2385e-04,4.3618e-03,7.9963e-06],[7.3927e-07,8.7688e-06,1.8454e-05,1.9831e-04,1.9305e-03,6.2879e-06],[7.7376e-07,8.8673e-06,1.8517e-05,2.0194e-04,1.8297e-03,6.3183e-06],6.3183e-06]]])
(Pdb) torch.all(prediction_time == prediction_time2)
tensor(False)

如您所见,即使featurefeature2看似相同的输入,模型的输出也不匹配。这也不是随机的,因为在我执行完上面的那些行并在下面运行了这些行之后:

(Pdb) prediction_tag,prediction_time = model(feature)
(Pdb) prediction_time
tensor([[[9.6584e-06,6.8072e-06]]])
(Pdb) prediction_tag2,prediction_time2 = model(feature2)
(Pdb) prediction_time2
tensor([[[8.0289e-07,6.3183e-06]]])

我得到相同,不同的输出。为什么会遇到这个问题?我完全感到困惑。

注意:我已检查featurefeature2的dtypes为torch.float32feature是从已设置的割炬DataLoader中提取的,而feature2是从读取文件中直接获取的。

编辑:这是模型的构造方式:

class CRNN(nn.Module):
    def __init__(self,inputdim,outputdim,**kwargs):
        super().__init__()
        features = nn.ModuleList()
        self.features = nn.Sequential(
            Block2D(1,32),nn.LPPool2d(4,(2,4)),Block2D(32,128),Block2D(128,(1,nn.Dropout(0.3),)
        with torch.no_grad():
            rnn_input_dim = self.features(torch.randn(1,1,500,inputdim)).shape
            rnn_input_dim = rnn_input_dim[1] * rnn_input_dim[-1]

        self.gru = nn.GRU(rnn_input_dim,128,bidirectional=True,batch_first=True)
        self.temp_pool = parse_poolingfunction(kwargs.get(
            'temppool','linear'),inputdim=256,outputdim=outputdim)
        self.outputlayer = nn.Linear(256,outputdim)
        self.features.apply(init_weights)
        self.outputlayer.apply(init_weights)

    def forward(self,x):
        batch,time,dim = x.shape
        x = x.unsqueeze(1)
        x = self.features(x)
        x = x.transpose(1,2).contiguous().flatten(-2)
        x,_ = self.gru(x)
        decision_time = torch.sigmoid(self.outputlayer(x)).clamp(1e-7,1.)
        decision_time = torch.nn.functional.interpolate(
            decision_time.transpose(1,2),mode='linear',align_corners=False).transpose(1,2)
        decision = self.temp_pool(x,decision_time).clamp(1e-7,1.).squeeze(1)
        return decision,decision_time

def crnn(inputdim=64,outputdim=527,pretrained_file='gpv_f'):
    model = CRNN(inputdim,outputdim)
    if pretrained_file:
        state = torch.load(Path(__file__).parent / pretrained_file,map_location='cpu')
        model.load_state_dict(state,strict=True)
    return model

具有以下助手:

class Block2D(nn.Module):
    def __init__(self,cin,cout,kernel_size=3,padding=1):
        super().__init__()
        self.block = nn.Sequential(
            nn.BatchNorm2d(cin),nn.Conv2d(cin,kernel_size=kernel_size,padding=padding,bias=False),nn.LeakyReLU(inplace=True,negative_slope=0.1))

    def forward(self,x):
        return self.block(x)

def init_weights(m):
    if isinstance(m,(nn.Conv2d,nn.Conv1d)):
        nn.init.kaiming_normal_(m.weight)
        if m.bias is not None:
            nn.init.constant_(m.bias,0)
    elif isinstance(m,nn.BatchNorm2d):
        nn.init.constant_(m.weight,1)
        if m.bias is not None:
            nn.init.constant_(m.bias,0)
    if isinstance(m,nn.Linear):
        nn.init.kaiming_uniform_(m.weight)
        if m.bias is not None:
            nn.init.constant_(m.bias,0)


class LinearSoftPool(nn.Module):
    """LinearSoftPool

    Linear softmax,takes logits and returns a probability,near to the actual maximum value.
    Taken from the paper:

        A Comparison of Five Multiple Instance Learning Pooling Functions for Sound Event Detection with Weak Labeling
    https://arxiv.org/abs/1810.09050

    """
    def __init__(self,pooldim=1):
        super().__init__()
        self.pooldim = pooldim

    def forward(self,logits,time_decision):
        return (time_decision**2).sum(self.pooldim) / time_decision.sum(
            self.pooldim)


class MeanPool(nn.Module):
    def __init__(self,decision):
        return torch.mean(decision,dim=self.pooldim)


def parse_poolingfunction(poolingfunction_name='mean',**kwargs):
    """parse_poolingfunction
    A heler function to parse any temporal pooling
    Pooling is done on dimension 1

    :param poolingfunction_name:
    :param **kwargs:
    """
    poolingfunction_name = poolingfunction_name.lower()
    if poolingfunction_name == 'mean':
        return MeanPool(pooldim=1)
    elif poolingfunction_name == 'linear':
        return LinearSoftPool(pooldim=1)

解决方法

没有模型很难说。 通常,您应该始终遵循pytorch的{​​{3}}准则,因此,如果在每次执行和设置之前在某处使用numpy,请尝试设置torch.manual_seed(0)np.random.seed(0)

torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

开头。看看是否有任何改变。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res