Python产生batch数据的操作
作者:小小黄01 发布时间:2022-11-22 16:00:59
标签:Python,batch,数据
产生batch数据
输入data中每个样本可以有多个特征,和一个标签,最好都是numpy.array格式。
datas = [data1, data2, …, dataN ], labels = [label1, label2, …, labelN],
其中data[i] = [feature1, feature2,…featureM], 表示每个样本数据有M个特征。
输入我们方法的数据,all_data = [datas, labels] 。
代码实现
通过索引值来产生batch大小的数据,同时提供是否打乱顺序的选择,根据随机产生数据量范围类的索引值来打乱顺序。
import numpy as np
def batch_generator(all_data , batch_size, shuffle=True):
"""
:param all_data : all_data整个数据集,包含输入和输出标签
:param batch_size: batch_size表示每个batch的大小
:param shuffle: 是否打乱顺序
:return:
"""
# 输入all_datas的每一项必须是numpy数组,保证后面能按p所示取值
all_data = [np.array(d) for d in all_data]
# 获取样本大小
data_size = all_data[0].shape[0]
print("data_size: ", data_size)
if shuffle:
# 随机生成打乱的索引
p = np.random.permutation(data_size)
# 重新组织数据
all_data = [d[p] for d in all_data]
batch_count = 0
while True:
# 数据一轮循环(epoch)完成,打乱一次顺序
if batch_count * batch_size + batch_size > data_size:
batch_count = 0
if shuffle:
p = np.random.permutation(data_size)
all_data = [d[p] for d in all_data]
start = batch_count * batch_size
end = start + batch_size
batch_count += 1
yield [d[start: end] for d in all_data]
测试数据
样本数据x和标签y可以分开输入,也可以同时输入。
# 输入x表示有23个样本,每个样本有两个特征
# 输出y表示有23个标签,每个标签取值为0或1
x = np.random.random(size=[23, 2])
y = np.random.randint(2, size=[23,1])
count = x.shape[0]
batch_size = 5
epochs = 20
batch_num = count // batch_size
batch_gen = batch_generator([x, y], batch_size)
for i in range(epochs):
print("##### epoch %s ##### " % i)
for j in range(batch_num):
batch_x, batch_y = next(batch_gen)
print("-----epoch=%s, batch=%s-----" % (i, j))
print(batch_x, batch_y)
补充:使用tensorflow.data.Dataset构造batch数据集
import tensorflow as tf
import numpy as np
def _parse_function(x):
num_list = np.arange(10)
return num_list
def _from_tensor_slice(x):
return tf.data.Dataset.from_tensor_slices(x)
softmax_data = tf.data.Dataset.range(1000) # 构造一个队列
softmax_data = softmax_data.map(lambda x:tf.py_func(_parse_function, [x], [tf.int32]))# 将数据进行传入
softmax_data = softmax_data.flat_map(_from_tensor_slice) #将数据进行平铺, 将其变为一维的数据,from_tensor_slice将数据可以输出
softmax_data = softmax_data.batch(1) #构造一个batch的数量
softmax_iter = softmax_data.make_initializable_iterator() # 构造数据迭代器
softmax_element = softmax_iter.get_next() # 获得一个batch的数据
sess = tf.Session()
sess.run(softmax_iter.initializer) # 数据迭代器的初始化操作
print(sess.run(softmax_element)) # 实际获得一个数据
print(sess.run(softmax_data))
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/huanghaocs/article/details/83242353


猜你喜欢
- 本文研究的主要是Django开发中的signal 的相关内容,具体如下。前言在web开发中, 你可能会遇到下面这种场景:在用户完成某个操作后
- 给浏览器绑定事件有时候是非常痛苦的事情,不同的浏览器提供不尽相同的功能的同时,也提供了不同的事件。例如,IE 系列的浏览器支持 mousee
- 本文实例讲述了Python unittest模块用法。分享给大家供大家参考,具体如下:python的unittest模块提供了一个测试框架,
- 1.JOIN和UNION区别 join 是两张表做交连后里面条件相同的部分记录产生一个记录集, union是产生的两个记录集(字段要一样的)
- 一、前言Python中列表的复制分为几种情况:直接赋值浅复制深复制下面通过实例分析一下这几种情况的区别。二、直接赋值a = [11, 22,
- 大家都知道Vue.js是中国人创造出来的,简单易用,所以必须要支持一下Vue采用的MVVM设计模式也就是说model和view绑定 mode
- 本文实例讲述了Python判断Abundant Number的方法。分享给大家供大家参考。具体如下:Abundant Number,中文译成
- join 方法用于连接字符串数组 s = ['a', 'b', 'c', 'd
- SQL Server中加密是层级的,每一个上层为下提供保护。如图:实例:/** SMK(Service Master Key)在SQL Se
- 目录前言掘金的成长搬家命令行工具环境配置main.pycookie.jsongithub 地址前言最近不少写博客的朋友跟我反馈博客园的一些文
- 报错信息:Store update, insert, or delete statement affected an unexpected
- 如果你的模型中含有 datetime 类型的字段,表单中需要用户输入日期和时间,那么你如何保证不同用户输入的时间都遵循一定的格式 (DD/M
- 在如今的Web设计中,图片的应用是必不可少的,为了更好地设计网站效果,大体积的图片被越来越多地应用到Web设计中来,所以,更好地优化图片文件
- python 3.x版本print输出不换行的格式如下:print(x, end="")其中,end=&quo
- 共有三种推导式列表(list)推导式字典(dict)推导式集合(set)推导式列表推导式基本语法:[out_express for out_
- 前言在Python中,enumrate和range都常用于for循环中,enumrate函数用于同时循环列表和元素,而range()函数可以
- 效果如图所示:测试sql语句如下:declare @tab table(Class varchar(20),Student varchar(
- 前言在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便
- 前言博主学习python有个几年了,对于python的掌握越来越深,很多时候,希望自己能掌握python越来越多的知识,但是,也意识很多时候
- 一、 什么是遗传算法?遗传算法是仿真生物遗传学和自然选择机理,通过人工方式所构造的一类搜索算法,从某种程度上说遗传算法是对生物进化过程进行的