为什么paddle教程中train_loader后要加()

本文探讨了在Paddle中为何使用train_loader时需要加括号,原因是它是一个使用yield关键字的生成器函数,而PyTorch中相应操作无需加括号。通过对yield的解释,帮助读者理解两种框架在处理数据加载上的不同。
部署运行你感兴趣的模型镜像

如下图中画圈处,在用torch的时候是没有加()的,但在paddle中加了(),所以很不解。

 今天看了一篇关于yield关键字的用法和一段代码后,恍然大悟:

 

 在paddle中,这个train_loader其实是一个函数(生成器),使用了yield这个关键字,因此需要加“()”

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[8], line 23 20 loss_fn = paddle.nn.CrossEntropyLoss() 22 ##模型的训练 ---> 23 train_dataset = paddle.io.TensorDataset(paddle.to_tensor(train_X), paddle.to_tensor(train_y)) 24 train_loader = paddle.io.DataLoader(train_dataset, batch_size=128, shuffle=True) 26 # 训练过程记录 TypeError: TensorDataset.__init__() takes 2 positional arguments but 3 were given##模型设计 class BikeClassifier(paddle.nn.Layer): def __init__(self, input_size): super().__init__() self.fc1 = paddle.nn.Linear(input_size, 128) self.relu1 = paddle.nn.ReLU() self.fc2 = paddle.nn.Linear(128, 64) self.relu2 = paddle.nn.ReLU() self.fc3 = paddle.nn.Linear(64, 3) # 三分类输出 self.softmax = paddle.nn.Softmax() def forward(self, x): x = self.relu1(self.fc1(x)) x = self.relu2(self.fc2(x)) return self.softmax(self.fc3(x)) # 模型初始化 model = BikeClassifier(input_size=X.shape[1]) optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()) loss_fn = paddle.nn.CrossEntropyLoss() ##模型的训练 train_dataset = paddle.io.TensorDataset(paddle.to_tensor(train_X), paddle.to_tensor(train_y)) train_loader = paddle.io.DataLoader(train_dataset, batch_size=128, shuffle=True) # 训练过程记录 train_losses = [] train_accs = [] val_accs = [] for epoch in range(150): model.train() total_loss = 0 correct = 0 for batch_x, batch_y in train_loader: outputs = model(batch_x) loss = loss_fn(outputs, batch_y) loss.backward() optimizer.step() optimizer.clear_grad() total_loss += loss.numpy() correct += (outputs.argmax(1) == batch_y).sum().numpy() # 验证集评估 model.eval() with paddle.no_grad(): val_outputs = model(paddle.to_tensor(test_X)) val_acc = (val_outputs.argmax(1) == paddle.to_tensor(test_y)).numpy().mean() epoch_loss = total_loss / len(train_loader) epoch_acc = correct / len(train_X) train_losses.append(epoch_loss) train_accs.append(epoch_acc) val_accs.append(val_acc)
最新发布
10-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值