[概率-几何分布] Dice (III)

题目传送门:https://vjudge.net/contest/361424#problem/G
题意:给出一个n面色子,现在扔色子,知道所有面都出现一次,问掷色子次数的期望值。
题目解析:假设现在已经掷出了k个不同的面,再掷下一次的过程是一次伯努利实验,即X(首次掷出新面需要的投掷次数)服从参数p( 掷出新面的概率是(n-k) / n )的几何分布,因此E(X)=1/p。
k从0到n,把对应的期望累加起来就好了。

#include <bits/stdc++.h>
#define eps 1e-10
using namespace std;
const int N = 1e5+7;
double rec[N];
int main()
{
	int t,cnt=0;
	scanf("%d", &t);
	while(t--) {
		int n,p;
		scanf("%d", &n);
		for(int i=0; i<n; i++) {
			rec[i]= n*1.0/(n-i) + rec[i-1];
		}
		printf("Case %d: %.6f\n",++cnt,rec[n-1]+eps);
	}
	return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以了解到Multi-label focal dice loss是多标签分类问题中的一种损失函数,结合了focal loss和dice loss的特点。下面是Multi-label focal dice loss的实现代码: ```python import torch import torch.nn as nn import torch.nn.functional as F class MultiLabelFocalDiceLoss(nn.Module): def __init__(self, gamma=2, alpha=None, size_average=True): super(MultiLabelFocalDiceLoss, self).__init__() self.gamma = gamma self.alpha = alpha if isinstance(alpha, (float, int)): self.alpha = torch.Tensor([alpha, 1 - alpha]) if isinstance(alpha, list): self.alpha = torch.Tensor(alpha) self.size_average = size_average def forward(self, input, target): if input.dim() > 2: input = input.view(input.size(0), input.size(1), -1) # N,C,H,W => N,C,H*W input = input.transpose(1, 2) # N,C,H*W => N,H*W,C input = input.contiguous().view(-1, input.size(2)) # N,H*W,C => N*H*W,C if target.dim() == 4: target = target.view(target.size(0), target.size(1), -1) # N,C,H,W => N,C,H*W target = target.transpose(1, 2) # N,C,H*W => N,H*W,C target = target.contiguous().view(-1, target.size(2)) # N,H*W,C => N*H*W,C elif target.dim() == 3: target = target.view(-1, 1) else: target = target.view(-1) target = target.float() # focal loss logpt = F.log_softmax(input, dim=1) logpt = logpt.gather(1, target.long().view(-1, 1)) logpt = logpt.view(-1) pt = logpt.exp() if self.alpha is not None: if self.alpha.type() != input.data.type(): self.alpha = self.alpha.type_as(input.data) at = self.alpha.gather(0, target.long().data.view(-1)) logpt = logpt * at loss = -1 * (1 - pt) ** self.gamma * logpt # dice loss smooth = 1 input_soft = F.softmax(input, dim=1) iflat = input_soft.view(-1) tflat = target.view(-1) intersection = (iflat * tflat).sum() A_sum = torch.sum(iflat * iflat) B_sum = torch.sum(tflat * tflat) dice = (2. * intersection + smooth) / (A_sum + B_sum + smooth) loss += (1 - dice) if self.size_average: return loss.mean() else: return loss.sum() ``` 其中,focal loss和dice loss的实现都在forward函数中。在这个函数中,首先将输入和目标数据进行处理,然后计算focal loss和dice loss,并将它们相加作为最终的损失函数。需要注意的是,这里的输入和目标数据都是经过处理的,具体处理方式可以参考代码中的注释。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值