欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

d2l.train_ch3函数,将输入数据转化为该函数所接受的格式

程序员文章站 2022-08-09 16:00:03
python中的列表是我们非常熟悉一种数据格式,但在深度学习中很少用到,神经网络需要的数据格式为张量,那我们可以通过nd.array的方式将熟悉的列表数据转为张量from mxnet import autograd, nddata = nd.array(data)然后通过data_iter函数,生成随机的小批量样本,经过这两步转化可以将列表数据转为神经网络所需的张量数据,接下来我们可以将数据带入常用的函数进行计算,例如d2l中的包d2l.train_ch3(net, train_iter.....

  目的:使用d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None,None, trainer)这个函数进行softmax回归计算

  问题:使用非官方的数据报错

  解决方法:将输入数据转为函数要求的格式

  初始数据:

d2l.train_ch3函数,将输入数据转化为该函数所接受的格式

 

  原先的数据是列表,通过nd.array的方式将熟悉的列表数据转为张量

from mxnet import autograd, nd

data  = nd.array(data)

  然后通过data_iter函数,生成随机的小批量样本

代码

def data_iter(batch_size, features, labels):
    num_examples = len(features)
    indices = list(range(num_examples))
    random.shuffle(indices)  # 样本的读取顺序是随机的  indices列表随机排列
    for i in range(0, num_examples, batch_size):
        j = nd.array(indices[i: min(i + batch_size, num_examples)])
        yield features.take(j), labels.take(j)  # take函数根据索引返回对应元素  最后结果为生成器

train_iter = list(data_iter(batch_size, image_data_all[0:1000], image_label_all[0:1000]))
test_iter = list(data_iter(batch_size, image_data_all[1000:1800], image_label_all[1000:1800]))

   这时将数据带入仍会报错,通过list(data_iter(...))的方式将生成器转化为列表,其中列表里面有张量,通过for循环我们可以得到我们需要 的张量

num_epochs = 5
d2l.train_ch3(net,train_iter, test_iter,loss, num_epochs, batch_size, None,
              None, trainer)

结果:
epoch 1, loss 1.1367, train acc 0.997, test acc 0.839
epoch 2, loss 0.7242, train acc 0.999, test acc 0.845
epoch 3, loss 0.6524, train acc 0.999, test acc 0.841
epoch 4, loss 0.5581, train acc 0.999, test acc 0.839
epoch 5, loss 0.0000, train acc 1.000, test acc 0.839

  成功!!!

本文地址:https://blog.csdn.net/z463544804/article/details/107326629