小编Szy*_*nop的帖子

PyTorch Lightning 在validation_epoch_end 中将张量移动到正确的设备

我想用 a 的validation_epoch_end方法创建一个新的张量LightningModule。从官方文档(第 48 页)中可以看出,我们应该避免直接.cuda().to(device)调用:

没有 .cuda() 或 .to() 调用。. . 闪电为你做这些。

我们鼓励使用type_as方法转移到正确的设备。

new_x = new_x.type_as(x.type())

但是,在一个步骤中,validation_epoch_end我没有任何张量可以type_as以干净的方式从(通过方法)复制设备。

我的问题是,如果我想在这种方法中创建一个新的张量并将其传输到模型所在的设备,我该怎么办?

我唯一能想到的就是在outputs字典中找到一个张量,但感觉有点乱:

avg_loss = torch.stack([x['val_loss'] for x in outputs]).mean()
output = self(self.__test_input.type_as(avg_loss))
Run Code Online (Sandbox Code Playgroud)

有没有干净的方法来实现这一目标?

python pytorch pytorch-lightning

7
推荐指数
1
解决办法
3810
查看次数

反应性 - 将可观察间隔与手动触发相结合

Observable.Interval(TimeSpan.FromSeconds(1))和一个订户在每次发生间隔时检查DB中的某些内容.但有时当我从DB那里检查​​时我想立即执行另一次检查(再次调用该用户,因为我知道队列中有东西).

通过将Interval与whilesubscriber方法结合起来,我已经设法实现了类似的功能:

 Observable              
.Interval(TimeSpan.FromSeconds(1))
.Sample(TimeSpan.FromSeconds(1)) //to avoid multiple 'stacked' intervals 
.Subscribe(RepeatAction);


private void RepeatAction(long _)
{
    bool wasSuccess;
    do
    {
        wasSuccess = CheckingInDB(); //Long operation
    } while (wasSuccess );
}
Run Code Online (Sandbox Code Playgroud)

但是有可能用纯粹的反应来实现这种行为吗?

c# system.reactive observable

6
推荐指数
1
解决办法
768
查看次数

当方法返回无效结果时,我应该抛出什么异常

我想知道当被调用的方法返回意外结果时,我应该抛出什么异常(在.NET中有什么).

例如,想象我有工厂的情况:

public abstract class Factory
{
    public A Create()
    {
        var a = new A();
        var b = CreateDependencyOfA();
        a.Something = b.Property;
    }

    protected abstract B CreateDependencyOfA();
} 
Run Code Online (Sandbox Code Playgroud)

我记录该类并创建假设CreateDependencyOfA不返回null(或其他任何东西,即假设该值介于1和5之间的整数).

当实现违反此契约时,我应该怎么做(在这种情况下返回null).在.NET中是否存在为此目的设计的任何异常类型?我知道有一些ArgumentExceptions,但据我所知,它们是输入参数.输出参数是否相同?

我问这个是因为我相信输入和输出参数之间存在某种对称性,但我不知道任何输出异常.

.net c# exception

4
推荐指数
1
解决办法
1261
查看次数