暴力补坑:win10+tensorflow+mnist+python3.6导入mnist数据错误:UnicodeEncodeError

Win10环境+ CUDA9.0 +CUDNN7.0+TensorFlow1.7/1.6/1.5配置 前言:很多小伙伴在选择CUDA版本和cudnn版本上有疑问,这里简短的说一下,希望能帮到各位小伙伴,我在网上看到有人说,要根据自己的显卡来选择CUDA,其实是错误的,你可以下载自己所需要的CUDA版本,这只是个驱动而已。CUDA的版本和cundd的版本要对应,不然可能会有不兼容报错。CUDA是显卡驱动程序,cundd是用来加速深度学习训练的库,在训练网络时,使用GPU加速,会调CUDA驱动和cud... 阅读详情

问题背景描述

mnist本身是tensorflow下最常用也是最简单基础的数据包。
所以,在新安装tensorflow,给tensorflow配gpu版本,或者试验tensorflow的其他没有接触过的操作时经常被拿来作为测试之用。
然而,官方文档里所说的引用mnist数据库的方法:

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets(‘MNIST_data’, one_hot=True)

在直接运行时会报错:

File “C:\Anaconda3\envs\tensorflow-gpu\lib\site-packages\zmq\utils\jsonapi.py”, line 43, in dumps
s = s.encode(‘utf8’)
UnicodeEncodeError: ‘utf-8’ codec can’t encode character ‘\udcd5’ in position 2416: surrogates not allowed

网络上这个问题相关的资料还是很多的,也有解决方案,但是我并不喜欢:

  1. 很多回答都是基于Linux,对于像我这样只有win10的,有些方法值得商榷
  2. 对于刚接触tensorflow的人,或者说python不熟的,需要的是一个简单粗暴的使用mnist数据的方式,在encode问题或者用二进制文件读取mnist上花费学习的经历简直是消磨革命热情

所以,不如直接基于mnist的二进制读取,写个和官方的引用方式差不多的猴版module,岂不美哉?

准备

http://yann.lecun.com/exdb/mnist/去下载那4个mnist数据包,解压后放在当前工作目录的mnist目录下(没有就创建一个)
就是这四个

代码

在工作目录下创建mnist.py,高仿从命名开始,内容如下:

# -*- coding: utf-8 -*-
import numpy as np
import struct

# 读取图片,返回 [样本数,图像宽*图像高]的numpy数组
def read_img(path, filename):
    with open(path+filename,'rb') as bitfile:
        buffer = bitfile.read()
        head = struct.unpack_from('>IIII',buffer,0)
        print('load head:', head)
        imgNum = head[1]
        width = head[2]
        hight = head[3]
        bits = imgNum*width*hight
        bitsString = '>'+str(bits)+'B'
        offset = struct.calcsize('>IIII')
        imgs = struct.unpack_from(bitsString,buffer,offset)

    imgs = np.reshape(imgs,[imgNum,width*hight])
    print('load image finished')
    return imgs

# 读取真值,返回 [样本数]的numpy数组
def read_label(path, filename):
    with open(path+filename,'rb') as bitfile:
        buffer = bitfile.read()
        head = struct.unpack_from('>II',buffer,0)
        print('load head:', head)
        labelNum = head[1]
        labelString = '>'+str(labelNum)+'B'
        offset = struct.calcsize('>II')
        imgs = struct.unpack_from(labelString,buffer,offset)

    label = np.reshape(imgs,[labelNum,1])
    labels = np.zeros([labelNum,10])
    for _ in range(labelNum):
        labels[_,label[_]] = 1.0
    print('load labels finished')
    return labels

class train(object):
    def __init__(self,path='mnist\\'):
        self.images = read_img(path, 'x_train.idx3-ubyte')
        self.labels = read_label(path,'y_train.idx1-ubyte')
        self.it_img=iter(self.images)
        self.it_label=iter(self.labels)


    def next_batch(self,batch_size):
        try:
            while True:
                batch_img=[]
                batch_label=[]
                for _ in range(batch_size):
                    batch_img.append(next(self.it_img))
                    batch_label.append(next(self.it_label))
                return np.array(batch_img), np.array(batch_label)
        except StopIteration:
            return StopIteration



class test(object):
    def __init__(self,path='mnist\\'):
        self.images = read_img(path, 'x_test.idx3-ubyte')
        self.labels = read_label(path,'y_test.idx1-ubyte')
        self.it_img=iter(self.images)
        self.it_label=iter(self.labels)

    def next_batch(self,batch_size):

        try:
            while True:
                batch_img=[]
                batch_label=[]
                for _ in range(batch_size):
                    batch_img.append(next(self.it_img))
                    batch_label.append(next(self.it_label))
                return np.array(batch_img), np.array(batch_label)
        except StopIteration:
            return StopIteration

两个类,train 和test,读取不同的数据则创建对应的对象即可

食用方法


In[1]: import mnist

In[2]: train=mnist.train()

load head: (2051, 60000, 28, 28)
load image finished
load head: (2049, 60000)
load labels finished

In[3]: test=mnist.test()

load head: (2051, 10000, 28, 28)
load image finished
load head: (2049, 10000)
load labels finished

In[4]: img,label=train.next_batch(batch_size=5)
img
Out[5]: 
array([[0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

label
Out[6]: 
array([[ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.]])

In[7]: import numpy as np

In[8]: np.shape(img)
Out[8]: (5, 784)

In[9]: np.shape(label)
Out[9]: (5, 10)

基本上可以算开袋即食了

现在只包含了next_batch这一方法,如果之后有需求可以再加。

Voronoi算法构建多晶 孪晶多晶 采用孪晶的原子链作为种子通过voronoi算法可以得到孪晶多晶结构。 孪晶种子: txt文件不需要特殊设置 box 150 150 150 random 8 得到孪晶多晶: 通过改变孪晶种子的长度可以得到不同孪晶片层厚度的多晶。 准二维柱晶 所有晶粒在某一维度的晶向一致,晶粒仅在平面内具有旋转关系,所有晶界为旋转对称晶界,这种结构的多晶其位错滑移在某些方向受限,但是能极大的提高晶粒... 阅读详情

相关推荐

保姆级教程:用STM32标准库搞定TIM1的PWM输出(附完整代码和避坑点)

本文提供STM32F103高级定时器TIM1的PWM输出保姆级教程,涵盖从工程搭建到完整代码实现的详细步骤。重点解析TIM1作为高级定时器的特殊配置要点,包括时钟初始化、PWM通道设置和GPIO复用功能,并附常见问题排查指南和动态调整占空比的实用技巧,帮助开发者高效实现精准PWM控制。

weixin_30673611的博客 433

UnicodeEncodeError: ‘utf-8‘ codec can‘t encode characters in position xx-xx: surrogates not allowed

在往mongodb中存入数据的时候,报了一个面的错误,​ 这段错误代码的意思是utf-8没有办法对这个字符串进行解码,因为没有合适的字符映射到该编码,大部分问题出现在字符串中存在类似\uD83C\uDF1D这种以\u开头的字符串,python会认为这是一个unicode编码,于是想办法把它解码成一个字符串,但发现编码映射表中没有这样的字符与之对应(可能这个编码是一个emoji表情),于是就报错: 解决办法为: s = '\\u0645\\u0639 \\u0634\\u0631\\u0643\\u0

simple_code 6621

从厘米级到公里级:北斗网格10级精度在ArcPro中的完整应用指南

本文提供了北斗网格十级精度体系在ArcGIS Pro中的完整应用指南。详细解析了从660公里到1.5厘米的十级网格尺度及其编码逻辑,并重点演示了如何在ArcPro中生成网格、计算编码,以及根据项目需求(如滑坡监测)选择合适精度层级的实战策略。指南旨在帮助GIS专业人士利用这套统一的网格框架,高效管理多尺度空间数据并优化分析工作流。

Black的专栏 475

解决UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 64: surrogates not

今天打算在我自己的x230的本子上跑一下之前在别的机器上训练的语音模型。两个关键点,一个就是thinkPad x230的本子是没有独立显卡的,另外一个我想使用的这个ckpt文件(model文件)是使用GPU训练出的model;综合来说就是我用没有显卡的本子跑使用显卡训练出来的模型。然后出现了下面的错误提示: UnicodeEncodeError: 'utf-8' codec can...

qq_37179269的博客 7347

Gromacs空蛋白模拟实战:从PDB文件到动力学轨迹的完整流程解析

本文详细解析了使用Gromacs进行空蛋白分子动力学模拟的完整实战流程。从PDB文件处理、力场选择与拓扑构建,到模拟盒子创建、溶剂化与电荷中和,再到能量最小化、NVT/NPT平衡及最终的生产模拟与基础分析,提供了每一步的命令详解和关键注意事项,旨在帮助计算生物学研究者系统掌握这一核心研究工具。

weixin_28454475的博客 279

Python自动化神器:OP插件64位版从安装到实战(附雷电模拟器截图技巧)

本文详细介绍了Python自动化神器OP插件64位版的安装与实战应用,包括环境搭建、窗口控制、鼠标键盘模拟等核心功能。特别针对雷电模拟器提供了最小化截图技术和OCR识别优化方案,帮助开发者高效实现Windows自动化任务。

weixin_29094539的博客 336

已解决UnicodeEncodeError: ‘utf-8‘ codec can‘t encode character ‘\ud9b9‘ in position 38: surrogates not

已解决UnicodeEncodeError: ‘utf-8’ codec can’t encode character ‘\ud9b9’ in position 38: surrogates not allowed

努力让自己发光,对的人才能迎着光而来 1万+

实战篇(七):使用Processing和PixelFlow库创建交互式流体太极动画

类:用于配置流体运动的参数,比如圆的位置、半径、运动的角度和速度以及颜色等。类:实现了接口,用于更新流体物理仿真的状态,同时整合声音输入作为流体动态变化的一部分。my_update方法:是流体物理仿真更新的核心,它计算流体粒子的速度和位置,并且将这些数据传递给流体库来模拟流动。现在,让我们进一步分析并解释每个部分的作用以及如何操作。float x;// 圆心位置xfloat y;// 圆心位置y// 半径// 是否是顺时针// 圆周运动,弧上的点位置,以及上一帧的点位置// 角度。

帅小柏的博客 1636

Python报错:UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 1892:

在做用python做yolov3算法训练时出现如下报错: UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 1892: surrogates not allowed 排查方向: 遇到这类问题只要你程序路径中加入# coding=utf-8 语句,基本上就是文件路径与实际不对和命名问...

w77AYU的博客 1万+

FGC_grasp复现

FGC_GraspNet复现

qq_39568387的博客 385

DeepSeek-R1 论文阅读 DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

和。这些模型的核心创新点是通过强化学习(Reinforcement Learning, RL)来提升大型语言模型(LLM)的推理能力,而没有依赖传统的监督微调(Supervised Fine-Tuning, SFT)作为预训练的步骤。是一种通过大规模强化学习直接训练的模型。它在推理能力上表现出色,能够自然地展现出许多强大且有趣的推理行为。但它也有一些问题,比如可读性差和语言混合。这意味着模型在生成文本时,有时会显得不太清晰,或者不一致地使用不同语言。为了解决这些问题并进一步提升推理能力,研究者提出了。

CSPhD-winston的博客 1841

Windows环境下本地数据源Mnist的Tensorflow实例(Python3.6)

操作系统:Windows10 Python环境:3.6,并已经安装了numpy,Tensorflow等必备库 问题:网上很多文章了,现在修改的点就是使用本地已经下载的Mnist学习数据,而不再去下载。

kinsent的专栏 735

Unity-RetargetPro3-动画插件试用

一个名气大于实战的插件。

大话程序员 713

tensorflow查看自己的图片数据报错UnicodeEncodeError

Sypder中的tensorflow查看自己的图片数据报错:UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 1892: surrogates not allowed

qq_22522663的博客 2785

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python3.6中的fetch_mldata无法下载mnist数据集

1.自己下载mnist数据集,下载地址:https://github.com/amplab/datascience-sp14/raw/master/lab7/mldata/mnist-original.mat 2.然后把这个.mat文件放到  ~/scikit_learn_data/mldata 文件夹 3.重新运行程序,fetch_mldata('MNIST original') 将可以工作...

yang201610的博客 4568

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

问题:UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 2766:

问题: INFO:tensorflow:Restoring parameters from models_attacked_MLP/ae_k_4_n_7 Traceback (most recent call last): File "C:\anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2927, in...

qian_fighting的博客 2411

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

File "D:\Anaconda\envs\tensorflow\lib\site-packages\pyglet\canvas\base.py", line 65, in get_screen

https://blog.csdn.net/XJY104165/article/details/78806343?utm_source=blogxgwz8 试图运行强化学习代码时报错: runfile(‘F:/tensorflow_code/temp.py’, wdir=‘F:/tensorflow_code’) Traceback (most recent call last): File “”...

qq_36936510的博客 2万+

Tensorflow 填坑日记

坑一、UnicodeEncodeError: 'utf-8' codec can't encode character '\udcce' in position 1936: surrogates not a 这个坑搞了我很久,开始以为是python的版本问题 然后一路pint命令下去 发现是label_map_util.py这边的 with tf.gfile.FastGFile(path, '...

化州陈陆亮 1万+

win10使用tensorflow神经网络训练MNIST数据集详解

介绍 此神经网络中,使用了3层网络,一个输入层,一个隐藏层和一个输出层。使用了带指数衰减的学习率设置,正则化参数来避免过度拟合以及使用了滑动平均模型来使得模型更加robust。tensorflow中的函数定义比较复杂难懂,因此在这里附上使用tensorflow神经网络训练MNIST数据集的程序,以及各个函数的解释 程序 以下程序在anaconda python3.5的环境下可以直接运行 impor...

algorithm learning blog 691

【Python】‘utf-8‘ codec can‘t encode character ‘\udcd5‘ in position 2575: surrogates not allowed

'utf-8' codec can't encode character '\udcd5' in position 2575: surrogates not allowed 源代码出错的地方如下: filenames = [os.path.join(data_dir, '/data_batch_%d.bin' %ii)#find filenamefor ii in np.arange(1,...

LeonJin的博客 1万+

TensorFlow学习笔记7——Win7下Spyder运行python代码出现UnicodeEncodeError问题的解决

环境:         win7+Anaconda1.6.3+Spyder3.2.1+tensorflow1.1.0 问题描述:         执行下述代码,读取之前保存的tfrecord文件,发生错误。         import tensorflow as tf files = tf.train.match_filenames_once("./output/trainin

积跬步以至千里 5930

tensorflow导入mnist数据集出错的解决办法

from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)这是官方文档给出的导入代码,但我同很多人有一样的问题,运行程序的时候发现并没有讲MNIST数据集导入,so,在网上找了很多资料,最后找到了解决方法。先在你正在...

孤行 1万+

UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 101: surrogates not a

UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 101: surrogates not allowed就是文件路径问题

1万+

使用Tensorflow实现MNIST,环境Ubuntu16.04+python3.6

环境的安装可以参考我上一篇博客 最近开始学习深度学习方面的知识,做为深度学习的“Holle Word!”,MNIST是我们的入门demo,查了很多关于MNIST的资料,大部分只是讲解了MNIST的工作原理,代码原理,做为刚刚开始学习的新手,完全不知道如何下手,怎么创建工程,训练集和测试集放哪,如何训练,如何测试,完全不知所措。接下来我就详细的记录下我学习MNIST的过程。 TensorFlow中文...

qq_36414085的博客 534

Win7安装python第三方模块objgraph报错

在win7下安装python的第三方模块objgraph报错: File "C:\Python27\lib\site-packages\pip-7.1.2-py2.7.egg\pip\_vendor\colorama\a nsitowin32.py", line 166, in write_plain_text self.wrapped.write(text[start:...

dietan8353的博客 272

按照TensorFlow官方文档导入MNIST数据集失败的解决

按照TensorFlow官方文档导入MNIST数据集失败的解决

m0_37435073的博客 3万+
上一篇: IoT: FIWARE+Docker 城市天气信息收集与可视化( 一)
下一篇: 图像处理复习(一):SIFT
Nexusis
博客等级 码龄10年 41粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值