首页 PaddleCV 帖子详情
不适用paddle.Model的动态图进行MNIST识别,损失函数无法下降
收藏
快速回复
PaddleCV 问答图像分类 1315 3
不适用paddle.Model的动态图进行MNIST识别,损失函数无法下降
收藏
快速回复
PaddleCV 问答图像分类 1315 3

代码如下

```

import paddle
from paddle import nn
from paddle import optimizer
from paddle.vision import datasets
from paddle.io import Dataset, DataLoader
from paddle.vision import transforms as T
import numpy as np

transforms = T.Compose([T.ToTensor(), T.Normalize(mean=[127.5], std=[127.5])])

train_data = datasets.MNIST(mode='train', download=True, transform=transforms)
test_data = datasets.MNIST(mode='test', download=True, transform=transforms)

class MyDataset(Dataset):

def __init__(self, train=True):
self.train = train
if train:
self.data = train_data
else:
self.data = test_data

def __getitem__(self, index):
return self.data[index]

def __len__(self):
return len(self.data)

BATCH_SIZE = 128
train_loader = DataLoader(MyDataset(train=True), batch_size=BATCH_SIZE, shuffle=True)
test_loader = DataLoader(MyDataset(train=False), batch_size=BATCH_SIZE, shuffle=False)
net = nn.Sequential(
nn.Flatten(),
nn.Linear(784, 512),
nn.ReLU(),
nn.Linear(512, 256),
nn.ReLU(),
nn.Linear(256, 128),
nn.ReLU(),
nn.Linear(128, 10)
)
net.train()
optim = optimizer.Adam( parameters=net.parameters())
criterion = paddle.nn.CrossEntropyLoss()

for i, (x, y) in enumerate(train_loader):
y = paddle.to_tensor(y, stop_gradient=False)
y_pred = net(x)
loss = criterion(y_pred, y)
loss.backward()
optim.step()
optim.clear_grad()
if (i + 1) % 50 == 0:
print(f'loss: {loss.numpy()[0]:.2f}')

```

0
收藏
回复
全部评论(3)
时间顺序
dark_ai
#2 回复于2021-07

已解决,使用`trainsform`那一行改为`transforms = T.Compose([T.Normalize(mean=[127.5], std=[127.5])])`

0
回复
d
donkey233333
#3 回复于2021-07

好的,normalize会转为tensor,不需要专门的to tensor操作

0
回复
李长安
#4 回复于2021-12

可设置已解决

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户