dataloader 源码_DataLoader

dataloader 源码_DataLoaderimportpaddle.fluidasfluidimportnumpyasnpBATCH_NUM=10BATCH_SIZE=16EPOCH_NUM=4CLASS_NUM=10ITERABLE=True#whetherthecreatedDataLoaderobjectisiterableUSE_GPU=False#whethertous…

大家好,又见面了,我是你们的朋友全栈君。

import paddle.fluid as fluid

import numpy as np

BATCH_NUM = 10

BATCH_SIZE = 16

EPOCH_NUM = 4

CLASS_NUM = 10

ITERABLE = True # whether the created DataLoader object is iterable

USE_GPU = False # whether to use GPU

DATA_FORMAT = ‘batch_generator’ # data format of data source user provides

def simple_net(image, label):

fc_tmp = fluid.layers.fc(image, size=CLASS_NUM)

cross_entropy = fluid.layers.softmax_with_cross_entropy(image, label)

loss = fluid.layers.reduce_mean(cross_entropy)

sgd = fluid.optimizer.SGD(learning_rate=1e-3)

sgd.minimize(loss)

return loss

def get_random_images_and_labels(image_shape, label_shape):

image = np.random.random(size=image_shape).astype(‘float32’)

label = np.random.random(size=label_shape).astype(‘int64’)

return image, label

# If the data generator yields one sample each time,

# use DataLoader.set_sample_generator to set the data source.

def sample_generator_creator():

def __reader__():

for _ in range(BATCH_NUM * BATCH_SIZE):

image, label = get_random_images_and_labels([784], [1])

yield image, label

return __reader__

# If the data generator yield list of samples each time,

# use DataLoader.set_sample_list_generator to set the data source.

def sample_list_generator_creator():

def __reader__():

for _ in range(BATCH_NUM):

sample_list = []

for _ in range(BATCH_SIZE):

image, label = get_random_images_and_labels([784], [1])

sample_list.append([image, label])

yield sample_list

return __reader__

# If the data generator yields a batch each time,

# use DataLoader.set_batch_generator to set the data source.

def batch_generator_creator():

def __reader__():

for _ in range(BATCH_NUM):

batch_image, batch_label = get_random_images_and_labels([BATCH_SIZE, 784], [BATCH_SIZE, 1])

yield batch_image, batch_label

return __reader__

# If DataLoader is iterable, use for loop to train the network

def train_iterable(exe, prog, loss, loader):

for _ in range(EPOCH_NUM):

for data in loader():

exe.run(prog, feed=data, fetch_list=[loss])

# If DataLoader is not iterable, use start() and reset() method to control the process

def train_non_iterable(exe, prog, loss, loader):

for _ in range(EPOCH_NUM):

loader.start() # call DataLoader.start() before each epoch starts

try:

while True:

exe.run(prog, fetch_list=[loss])

except fluid.core.EOFException:

loader.reset() # call DataLoader.reset() after catching EOFException

def set_data_source(loader, places):

if DATA_FORMAT == ‘sample_generator’:

loader.set_sample_generator(sample_generator_creator(), batch_size=BATCH_SIZE, drop_last=True, places=places)

elif DATA_FORMAT == ‘sample_list_generator’:

loader.set_sample_list_generator(sample_list_generator_creator(), places=places)

elif DATA_FORMAT == ‘batch_generator’:

loader.set_batch_generator(batch_generator_creator(), places=places)

else:

raise ValueError(‘Unsupported data format’)

image = fluid.layers.data(name=’image’, shape=[784], dtype=’float32′)

label = fluid.layers.data(name=’label’, shape=[1], dtype=’int64′)

# Define DataLoader

loader = fluid.io.DataLoader.from_generator(feed_list=[image, label], capacity=16, iterable=ITERABLE)

# Define network

loss = simple_net(image, label)

# Set data source of DataLoader

#

# If DataLoader is iterable, places must be given and the number of places must be the same with device number.

# – If you are using GPU, call `fluid.cuda_places()` to get all GPU places.

# – If you are using CPU, call `fluid.cpu_places()` to get all CPU places.

#

# If DataLoader is not iterable, places can be None.

places = fluid.cuda_places() if USE_GPU else fluid.cpu_places()

set_data_source(loader, places)

exe = fluid.Executor(places[0])

exe.run(fluid.default_startup_program())

prog = fluid.CompiledProgram(fluid.default_main_program()).with_data_parallel(loss_name=loss.name)

if loader.iterable:

train_iterable(exe, prog, loss, loader)

else:

train_non_iterable(exe, prog, loss, loader)

”’

Users can use return_list = True in dygraph mode.

”’

with fluid.dygraph.guard(places[0]):

loader = fluid.io.DataLoader.from_generator(capacity=2, return_list=True)

set_data_source(loader, places[0])

for image, label in loader():

relu = fluid.layers.relu(image)

assert image.shape == [BATCH_SIZE, 784]

assert label.shape == [BATCH_SIZE, 1]

assert relu.shape == [BATCH_SIZE, 784]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132199.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 联想笔记本电脑键盘灯在哪里开_笔记本电脑键盘字母键变成数字键

    联想笔记本电脑键盘灯在哪里开_笔记本电脑键盘字母键变成数字键在联想系列的笔记本电脑中,自带有键盘等的功能,不仅可以显得炫酷,还可以在光线比较暗的情况下打开键盘灯可以方便我们看清键盘上的按键,不过很多用户并不知道联想的键盘灯怎么开吧,其实有快捷键可以快速开启的,下面就给大家分享一下联想笔记本键盘亮灯按哪个键吧。具体步骤如下:1、联想笔记本部分型号具bai备键盘背光功能,方法通du过“FN+空格”打开,支持此功能的zhi机型,dao键盘上有相应标示。部分早期的…

    2022年9月20日
  • SMTP服务器地址_imap服务器怎么设置

    SMTP服务器地址_imap服务器怎么设置认识SMTP服务器首先要知道SMTP,SMTP是“SimpleMailTransferProtocol”的缩写,即简单电子邮件传输协议,而SMTP服务器就是遵循SMTP协议发送电子邮件的服务器,用来发送或中转用户发出的电子邮件。SMTP协议是一个相对简单、高效的文本协议,使用25端口,属于TCP/IP协议族,可以帮助每台SMTP服务器在发送或中转电子邮件时找到下一个目的地,要为一个给定的域名决定…

    2022年10月3日
  • forkjoin使用_forkjoin与线程池区别

    forkjoin使用_forkjoin与线程池区别ForkJoinPoolinfoForkJoinPool=newForkJoinPool(Runtime.getRuntime().availableProcessors()*2);ForkJoinTask<Map<Long,InfoVO>>forkJoinTask=ThreadPoolManage.infoForkJoinPool.submit(newPriceTask(skuIds,0,skuIds.size(),infoSoaService));

    2022年9月20日
  • java生成mysql数据库建表语句、字段、字段类型、字段注释,可实现不用mysqldump备份数据库「建议收藏」

    java生成mysql数据库建表语句、字段、字段类型、字段注释,可实现不用mysqldump备份数据库「建议收藏」使用mysqldump备份数据库也是可行的,因为每次备份的时候都需要mysqldump这个文件,我在windows备份时没问题,但是放到linux上面时,centos系统死活不认这个文件,但又不想装mysql,一气之下自己研究了个不需要mysqldump就可以备份的程序,如果看了以下代码还有不懂的地方,这个网站有我的联系方式http://www.huashuku.top/about.ht…

    2022年9月8日
  • LaTex 论文排版(1): Win10 下 LaTex所需软件安装 (Tex live 2018 + Tex studio)

    LaTex 论文排版(1): Win10 下 LaTex所需软件安装 (Tex live 2018 + Tex studio)目录一、LaTex简介(1)百度百科(2)其他理解二、LaTex环境配置(LaTex排版所需要安装的软件)1Texlive安装(1)离线安装(2)在线安装2Texstudio安装(1)设置中文界面(2)添加行号参考资料一、LaTex简介论文投稿时,有的期刊要求用LaTex对论文进行排版,也有的期刊在投稿指南写接受LaTe…

    2022年6月4日
  • 大数据技术的发展趋势

    大数据技术的发展趋势英国牛津大学教授维克托·迈尔-舍恩伯格在其所撰写的《大数据时代》中表述,大数据时代是“已经发生的未来”,而在这个已经发生的未来里,没有旁观者。作为时代发生的必然产物,大数据正加速渗透至我们的日常生活,正完成对各传统领域的颠覆。本文从大数据时代的特点出发,为读者介绍目前的大数据技术的发展趋势以及大数据的生态体系。大数据时代的特点和市场规模大数据时代两个特点。第一,大数据技术以开源为主,迄今为止,尚未形成绝对技术垄断,即便是IBM、甲骨文等行业巨擘,也同样是集成了开源技术和该公司已有产品而已。开源技

    2022年5月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号