尝试改了全连接的输出,发现不能解决
ValueError: Target(Tensor(shape=[1], dtype=int64, place=CPUPlace, stop_gradient=True,
[1])) is out of class_dimension's upper bound(0)
ValueError Traceback (most recent call last)
/tmp/ipykernel_6118/2013954757.py in
158 val_loader = paddle.io.DataLoader(val_dataset, batch_size=20, shuffle=True)
159 # 启动训练过程
--> 160 train(model, opt, train_loader, val_loader)
/tmp/ipykernel_6118/2013954757.py in train(model, opt, train_loader, val_loader)
99 # 计算损失函数
100 loss_func = paddle.nn.CrossEntropyLoss(reduction='none')
--> 101 loss = loss_func(logits, label)
102 avg_loss = paddle.mean(loss)
103
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py in __call__(self, *inputs, **kwargs)
912 self._built = True
913
--> 914 outputs = self.forward(*inputs, **kwargs)
915
916 for forward_post_hook in self._forward_post_hooks.values():
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/layer/loss.py in forward(self, input, label)
404 axis=self.axis,
405 use_softmax=self.use_softmax,
--> 406 name=self.name)
407
408 return ret
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/functional/loss.py in cross_entropy(input, label, weight, ignore_index, reduction, soft_label, axis, use_softmax, name)
1669 raise ValueError(
1670 "Target({}) is out of class_dimension's upper bound({})".
-> 1671 format(invalid_label[0], input.shape[axis] - 1))
1672
1673 _, out = _C_ops.softmax_with_cross_entropy(
ValueError: Target(Tensor(shape=[1], dtype=int64, place=CPUPlace, stop_gradient=True,
[1])) is out of class_dimension's upper bound(0)
googlenet是调用的hapi,还是自己写的?
如果调用hapi,最后一层不要加激活,算loss时框架会加
图像分类 - 飞桨AI Studio - 人工智能学习实训社区 (baidu.com)
用的是这个里面的代码,全连接最后一层没有加激活
应该是你输出层和标签纬度不匹配,计算交叉熵时候出错了。
5楼说的有道理,不行打印下特征图的shape检查一下