手写字母数据集转换为.pickle文件

首先是数据集,我上传了相关的资源,https://download.csdn.net/download/fanzonghao/10566701

  转换代码如下:

import numpy as np
import os
import matplotlib.pyplot as plt
import matplotlib.image as mpig
import imageio
import pickle
"""
函数功能:将notMNIST_large和notMNIST_small的图片生成对应的.pickle文件
"""
def load_letter(folder,min_num_images,image_size):image_files=os.listdir(folder)print(folder)#定义存放图片的numpy类型dataset=np.ndarray(shape=(len(image_files),image_size,image_size),dtype=np.float32)num_image=0for image in image_files:image_file=os.path.join(folder,image)try:image_data=(mpig.imread(image_file)-0.5)/1assert image_data.shape==(image_size,image_size)dataset[num_image,:,:]=image_datanum_image+=1except(IOError,ValueError)as e:print('could not read:',image_file,e,'skipping')#提示所需样本数少if num_image<min_num_images:raise Exception('samples is few {}<{}'.format(num_image,min_num_images))dataset=dataset[0:num_image,:,:]#去掉没能读取图片的列表print('full dataset tensor:',dataset.shape)print('Mean:',np.mean(dataset))print('Standard deviation:',np.std(dataset))return dataset
"""
将训练样本和测试样本图片输出为.pickle形式
"""
def deal_data(base_dir,min_num_images):data_folders=[os.path.join(base_dir, i) for i in sorted(os.listdir(base_dir))]dataset_names=[]for folder in data_folders:set_filename=folder+'.pickle'dataset_names.append(set_filename)dataset=load_letter(folder, min_num_images, image_size=28)try:with open(set_filename,'wb') as f:pickle.dump(dataset,f,pickle.HIGHEST_PROTOCOL)except Exception as e:print('unable to save data',set_filename,e)print(dataset_names)return dataset_names
"""
给定训练和测试样本路径
"""
def produce_train_test_pickle():train_dir = './data/notMNIST_large'deal_data(train_dir,min_num_images=45000)test_dir = './data/notMNIST_small'deal_data(test_dir,min_num_images=1800)# #测试 imageio模块和matploab image的区别
# def test():
#     image_path = os.path.join('./data/notMNIST_small', 'MDEtMDEtMDAudHRm.png')
#     # 用matploab image 读出来的像素处于0~1之间
#     image = mpig.imread(image_path)
#     print(image.shape)
#     print((image - 0.5) / 1)
#     plt.subplot(121)
#     plt.imshow(image)
#
#     # 用imageio模块 读出来的像素处于0~255之间
#     image = imageio.imread(image_path)
#     print(image.shape)
#     print((image - 255 / 2) / 255)
#     plt.subplot(122)
#     plt.imshow(image)
#
#     plt.show()
if __name__ == '__main__':# test()produce_train_test_pickle()# #结果保存输出路径
# output_path='./data/notMNIST_small/Pickles'
# if not os.path.exists(output_path):
#     os.makedirs(output_path)

 打印生成的结果:

将两个数据集的手写字母生成的.pickle转换成整个.pickle数据集,这样在使用的时候方便直接调用,代码如下:

import numpy as np
import data_deal
import os
import pickle
"""
函数功能:功能1:调用把图片文件生成pickle文件的功能2:通过把生成的pickle文件调用生成train_dataset和valid_dataset和test_dataset
"""
#生成.pickle文件  没有的时候才执行
# data_deal.produce_train_test_pickle()"""
生成所需数据的np array
"""
def make_array(rows,img_size):if rows:dataset=np.ndarray(shape=(rows,img_size,img_size),dtype=np.float32)labels=np.ndarray(shape=(rows,),dtype=np.int32)else:dataset, labels=None,Nonereturn dataset,labels
"""
生成训练集和测试集 dataset
"""
def produce_train_test_datasets(pickle_files,train_size,valid_size=0):num_classes=len(pickle_files)valid_dataset,valid_lable=make_array(valid_size, img_size=28)train_dataset, train_lable = make_array(train_size, img_size=28)#小数据量存储近train_dataset和valid_datasetvalid_size_per_class = valid_size // num_classestrain_size_per_class = train_size // num_classesstart_v,start_t=0,0end_v,end_t=valid_size_per_class,train_size_per_classend_l=valid_size_per_class+train_size_per_classfor lable,pickle_file in enumerate(pickle_files):with open(pickle_file,'rb') as f:#载入每个字母的pickleevery_letter_samples=pickle.load(f)#打乱顺序 (7000,28,28)对下一层进行打乱操作 直接改变原有的顺序np.random.shuffle(every_letter_samples)#制作验证集if valid_dataset is not None:#放入test数据不需要valid_datasetvalid_letter=every_letter_samples[:valid_size_per_class,:,:]valid_dataset[start_v:end_v,:,:]=valid_lettervalid_lable[start_v:end_v]=lablestart_v+=valid_size_per_classend_v+=valid_size_per_class# 制作训练集train_letter = every_letter_samples[valid_size_per_class:end_l, :, :]train_dataset[start_t:end_t, :, :] = train_lettertrain_lable[start_t:end_t] = lablestart_t += train_size_per_classend_t += train_size_per_classreturn valid_dataset,valid_lable,train_dataset,train_lable
"""
实现训练样本 测试样本的A~j顺序打乱
"""
def random_letter(dataset,labels):#获取打乱的索引permutation=np.random.permutation(labels.shape[0])dataset=dataset[permutation,:,:]labels=labels[permutation]return dataset,labels
"""
生成最终的notMNIST.pickle 包含train valid test
"""
def notMNIST_pickle():train_size=200000valid_size=1000test_size=1000train_dir = './data/notMNIST_large/Pickles'train_pickle_dir=[os.path.join(train_dir,i) for i in sorted(os.listdir(train_dir))]valid_dataset,valid_lable,train_dataset,train_lable=produce_train_test_datasets(train_pickle_dir,train_size,valid_size)test_dir = './data/notMNIST_small/Pickles'test_pickle_dir=[os.path.join(test_dir,i) for i in sorted(os.listdir(test_dir))]_,_,test_dataset,test_lable=produce_train_test_datasets(test_pickle_dir,test_size)print('Training',train_dataset.shape,train_lable.shape)print('Validing',valid_dataset.shape,valid_lable.shape)print('Testing',test_dataset.shape,test_lable.shape)train_dataset,train_label=random_letter(train_dataset,train_lable)valid_dataset, valid_label = random_letter(valid_dataset, valid_lable)test_dataset, test_label = random_letter(test_dataset, test_lable)print('after shuffle training',train_dataset.shape,train_label.shape)print('after shuffle validing',valid_dataset.shape,valid_label.shape)print('after shuffle testing',test_dataset.shape,test_label.shape)all_pickle_file=os.path.join('./data','notMNIST.pickle')try:with open(all_pickle_file, 'wb') as f:save={'train_dataset':train_dataset,'train_label': train_label,'valid_dataset': valid_dataset,'valid_label': valid_label,'test_dataset': test_dataset,'test_label': test_label,}pickle.dump(save, f, pickle.HIGHEST_PROTOCOL)except Exception as e:print('unable to save data', all_pickle_file, e)statinfo=os.stat(all_pickle_file)print('Compressed pickle size',statinfo.st_size)
if __name__ == '__main__':notMNIST_pickle()

读取.pickle

import tensorflow as tf
import numpy as np
import pickle
import matplotlib.pyplot as plt
#对于x变成(samles,pixs),y变成one_hot (samples,10)
"""
one-hot
"""
def reformat(dataset,labels,imgsize,C):dataset=dataset.reshape(-1,imgsize*imgsize).astype(np.float32)#one_hot两种写法#写法一labels=np.eye(C)[labels.reshape(-1)].astype(np.float32)#写法二#labels=(np.arange(10)==labels[:,None]).astype(np.float32)return dataset,labels
"""
读取.pickle文件
"""
def pickle_dataset():path='./data/notMNIST.pickle'with open(path,'rb') as f:restore=pickle.load(f)train_dataset=restore['train_dataset']train_label = restore['train_label']valid_dataset = restore['valid_dataset']valid_label = restore['valid_label']test_dataset = restore['test_dataset']test_label = restore['test_label']del restore# print('Training:', train_dataset.shape, train_label.shape)# print('Validing:', valid_dataset.shape, valid_label.shape)# print('Testing:', test_dataset.shape, test_label.shape)train_dataset,train_label=reformat(train_dataset,train_label,imgsize=28,C=10)valid_dataset,valid_label=reformat(valid_dataset,valid_label,imgsize=28,C=10)test_dataset,test_label=reformat(test_dataset,test_label,imgsize=28,C=10)# print('after Training:', train_dataset.shape, train_label.shape)# print('after Validing:', valid_dataset.shape, valid_label.shape)# print('after Testing:', test_dataset.shape, test_label.shape)return train_dataset,train_label,valid_dataset,valid_label,test_dataset,test_label# #测试生成的数据正确不
# def test(train_dataset,train_label):
#     print(train_label[:10])
#     #plt.figure(figsize=(50,20))
#     for i in range(10):
#         plt.subplot(5,2,i+1)
#         plt.imshow(train_dataset[i].reshape(28,28))
#     plt.show()# if __name__ == '__main__':
#     test(train_dataset,train_label)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文看懂谷歌的AI芯片布局,边缘端TPU将大发神威

来源&#xff1a;新电子2018年7月Google在其云端服务年会Google Cloud Next上正式发表其边缘(Edge)技术&#xff0c;与另两家国际公有云服务大厂Amazon/AWS、Microsoft Azure相比&#xff0c;Google对于边缘技术已属较晚表态、较晚布局者&#xff0c;但其技术主张却与前两业者有…

opencv图像处理中的一些滤波器+利用滤波器提取条形码(解析二维码)+公交卡倾斜矫正+物体尺寸丈量

一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像中的细节信息也主要集中在其高频部分,因此,如何去掉高频干扰同时又保持细节信息是关键。为了去除噪声,有必要对图像进行平滑,可以采用低通滤波的方法去除高频干扰。图像平滑包括空域法和频域法两大…

智联汽车:复盘国内巨头布局

来源&#xff1a;申万宏源摘要&#xff1a;从今年阿里9月云栖大会、华为10月全联接大会、百度11月世界大会、腾讯11月合作伙伴大会可以发现BATH均高调展示了各自在汽车科技领域的研发成果;而京东、滴滴两家公司近两年来关于汽车科技领域的动态亦在频频更新。▌车联网:车载OS竞争…

Tomcat基础教程(一)

Tomcat, 是Servlet和JSP容器&#xff0c;其是实现了JSP规范的servlet容器。它在servlet生命周期内包容&#xff0c;装载&#xff0c;运行&#xff0c;和停止servlet容器。 Servlet容器的三种工作模式&#xff1a; 1. 独立的Servlet容器 Servlet容器与基于JAVA技术的Web服务器集…

opencv--图像金字塔

一&#xff0c;高斯金字塔--图片经过高斯下采样 """ 高斯金字塔 """ def gauss_pyramid():img cv2.imread(./data/img4.png)lower_reso cv2.pyrDown(img)lower_reso2 cv2.pyrDown(lower_reso)plt.subplot(131), plt.imshow(img)plt.title(In…

中国移动:5G蜂窝IoT关键技术分析

来源&#xff1a;5G本文讨论了蜂窝物联网的技术现状&#xff0c;针对增强机器类通信和窄带物联网技术标准&#xff0c;提出了2种现网快速部署方案&#xff0c;并进一步指出了C-IoT面向5G的演进路径。该路径充分考虑了5G网络中网络功能虚拟化、软件定义网络、移动边缘计算和大数…

清华大学发布:人脸识别最全知识图谱

来源&#xff1a;智东西摘要&#xff1a;本期我们推荐来自清华大学副教授唐杰领导的学者大数据挖掘项目Aminer的研究报告&#xff0c;讲解人脸识别技术及其应用领域&#xff0c;介绍人脸识别领域的国内玩人才并预测该技术的发展趋势。自20世纪下半叶&#xff0c;计算机视觉技术…

图像变换dpi(tif->jpg),直方图均衡化,腐蚀膨胀,分水岭,模板匹配,直线检测

一.图像变换dpi 1.示例1 import numpy as np from PIL import Image import cv2 def test_dp():path./gt_1.tif# imgImage.open(path)# print(img.size)# print(img.info)imgcv2.imread(path)imgImage.fromarray(img)print(img.size)print(img.info)img.save(test.jpg, dpi(3…

CV中的经典网络模型

目标检测 目标检测&#xff0c;不仅要识别目标是什么&#xff08;分类&#xff09;&#xff0c;还要知道目标的具体位置&#xff08;可以当作回归来做&#xff09;。 RCNN Selective Search 算法获得候选框&#xff0c;Alexnet提取特征&#xff0c;SVM对每个候选框区域打分。…

技术阅读周刊第十一期

技术阅读周刊&#xff0c;每周更新。 历史更新 20231124&#xff1a;第七期20231201&#xff1a;第八期20231215&#xff1a;第十‍期 A Comprehensive guide to Spring Boot 3.2 with Java 21, Virtual Threads, Spring Security, PostgreSQL, Flyway, Caching, Micrometer, O…

数据智能是大数据的未来

来源&#xff1a;中国信息产业网 近日&#xff0c;两家大数据领域的代表性企业Cloudera和Hortonworks宣布了它们相对平等的合并&#xff0c;宣称新公司将创建世界领先的下一代数据平台并提供业界首个企业数据云&#xff0c;这令很多人感到意外&#xff0c;大数据的未来何去何从…

利用GAN原始框架生成手写数字

这一篇GAN文章只是让产生的结果尽量真实&#xff0c;还不能分类。 本次手写数字GAN的思想&#xff1a; 对于辨别器&#xff0c;利用真实的手写数字&#xff08;真样本&#xff0c;对应的标签为真标签&#xff09;和随机噪声经过生成器产生的样本&#xff08;假样本&#xff0…

DL也懂纹理吗——图像的纹理特征

工作中遇到一个问题&#xff1a;对于同一场景&#xff0c;训练好的DL模型能把大部分样本分类准确&#xff0c;而对于少量负样本&#xff0c;DL会错分到另外一个对立的类中。错分的样本可以认为是难分的样本&#xff0c;但是我们还想知道这两种样本到底是哪里的差异导致DL做出了…

排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)

一.时间复杂度分析 - **时间复杂度**&#xff1a;对排序数据的总的操作次数。反应当n变化时&#xff0c;操作次数呈现什么规律 - **空间复杂度**&#xff1a;算法在计算机内执行时所需要的存储空间的容量&#xff0c;它也是数据规模n的函数。 1.例题: 有一个字符串数组&…

肠里细菌“肚里蛔虫”:肠脑研究缘何越来越热

来源&#xff1a;科学网最懂你大脑的&#xff0c;可能不是“肚子里的蛔虫”&#xff0c;而是肠子里的细菌——肠道菌群对神经系统、心理和行为方面的影响正成为一个新兴热点领域。在日前举办的美国神经科学学会年会上&#xff0c;一张海报上的大脑切片显微镜图像显示&#xff0…

SVM原理与实战

先看线性可分问题。对于线性可分&#xff0c;其实感知机就可以解决。但是感知机只是找到一个超平面将数据分开&#xff0c;而这样的超平面可能是平行的无限多个&#xff0c;我们需要在这其中找到最优的一个。怎么衡量一个超平面是不是最优的呢&#xff0c;直观上讲&#xff0c;…

2014-01-01

一:HyperlinkButton点击后打开新窗口的方法 1,直接在界面中写这段代码就可以了: <HyperlinkButton NavigateUri"http://www.cnblogs.com/wsdj-ITtech/" Content"Click Me" TargetName"_blank" FontSize"28" Height"50"…

李飞飞高徒:斯坦福如何打造基于视觉的智能医院?

作者&#xff1a;Albert Haque、Michelle Guo来源&#xff1a;机器之心自 2009 年担任斯坦福人工智能实验室和视觉实验室的负责人&#xff0c;李飞飞在推动计算机视觉方面研究的同时&#xff0c;还密切关注 AI 医疗的发展。昨日&#xff0c;李飞飞离任斯坦福 AI 实验室负责人一…

tensorflow知识点

一.bazel编译tensorflow注意版本号: 在/tensorflow/tensorflow/configure.py 查看bazel版本号 https://github.com/tensorflow/tensorflow https://github.com/bazelbuild/bazel/releases?after0.26.1 https://tensorflow.google.cn/ 二&#xff0c;基础知识点 1.打印出…

eclipse中如何导入jar包

如图&#xff0c;首先右键点击项目&#xff0c;选择最下面的properties&#xff0c; 然后进去之后点击java build path&#xff0c;右边会出来4个选项卡&#xff0c;选择libraries&#xff0c; 这时候最右边会有多个选项&#xff0c;第一个add jars是添加项目文件中的jar包&…