Tensorflow常见错误

本人在2016年7月份刚开始学习神经网络,原来是VS写C++,现在什么都换了,VS换成eclipse,C++换成Python,Windows换成Ubuntu,虽说Python比C++简单,可是对于一个写惯了的人来说,刚开始肯定是Python要难过C++。研一下半年那会刚搞C++,也把C++常见错误给罗列出来,方便日后自己知道错误方向,慢慢写得多了,错误基本上一看就知道是哪里蹦错了,到后期也就没有再继续往下写,不过出现的Bug真的是学习语言的最好老师。现在开始学Python调用tensorflow库进行深度学习,也决定将错误规整一下,而且错误解决的程度比C++难多了,因为现在用tensorflow的人还没有用C++的人那么多,时间那么久远。现在只能靠自己慢慢摸索前进。本博客会不断更新,毕竟我博士期间就打算使用神经网络干活了。现在的实习也是要用到神经网络。

不多说了,说多了都是泪,现在开始解决一个个bug,解决过程中也会不断增加我的成就感,fighting。。。


1、SyntaxError: Non-ASCII character ‘\xe5’ in file



弹出的错误提示:

这里写图片描述

这个错误是初学者常犯的错误,在写代码时一定要注意:

问题原因:

Python默认是以ASCII作为编码方式的,如果在自己的Python源码中(即使是注释部分)包含了中文(或者其他非英语系的语言),此时即使你把自己编写的Python源文件以UTF-8格式保存了,但实际上,这依然是不行的

解决方法:

源代码文件第一行添加:#coding:utf-8,这样就可以避免了,

也可以改为,在第一行增加:#-- coding: UTF-8 --

注:此语句一定要添加在源代码的第一行。

几个概念要先搞清楚:
•默认的python文件是采用ascii编码的,在头部加入# -- coding: utf-8 -- 则指定文件的编码格式是utf-8,那么就是说文件内你可以用中文或其他的文字了。
•cn = u”中文”,这个前缀u代表“中文”是采用unicode编码,也就是cn并不是string而是一个unicode。
•当你用print输出的时候会自动根据本地的语言环境转换成string。


2、IndentationError: expected an indented block


弹出的错误提示:

解决方法:

Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分别的。
在编译时会出现这样的错IndentationError:expected an indented block说明此处需要缩进,你只要在出现错误的那一行,按空格或Tab(但不能混用)键缩进就行。

往往有的人会疑问:我根本就没缩进怎么还是错,不对,该缩进的地方就要缩进,不缩进反而会出错,,比如:

if xxxxxx:

(空格)xxxxx

或者

def xxxxxx:

(空格)xxxxx

还有

for xxxxxx:

(空格)xxxxx

一句话 有冒号的下一行往往要缩进,该缩进就缩进


3、SyntaxError: ‘return’ outside function


原因:缩进错误

解决方法:语句调整缩进


4、类型错误
TypeError: Input ‘value’ of ‘Assign’ Op has type float64 that does not match type float32 of argument ‘ref’.
*







这是弹出的问题界面,从问题界面中我们可以看到具体出错是在哪一行出错的。如图中绿色框中便是代码出错的语句。根据提示的错误是传入数据的类型不对,通过调整数据类型来解决问题。

这是弹出的问题界面,从问题界面中我们可以看到具体出错是在哪一行出错的。如图中绿色框中便是代码出错的语句。根据提示的错误是传入数据的类型不对,通过调整数据类型来解决问题。



5、

IOError: broken data stream when reading image file

 

今天运行代码时出现一个奇怪的错误,如果不是这个错误,估计以后可能要想半天,因为今天出错误的代码就几行,来来回回也是试了改了好多次才突发奇想想到的问题的关键。

对于这个错误给出的提示我们很容易知道这是在读取图像时出现的错误,但是这个读取图像的程序我刚刚运行过是没有问题的。如下图所示代码运行时是没有任何问题存在的。

<span style="font-size:12px;">#显示图像尺寸与通道

import matplotlib.imageas mpimg

 

#1、读入图像

filename ="MarshOrchid.jpg"

image = mpimg.imread(filename)
</span>

运行这个没有问题,为什么转换到了tensorflow下就出现问题呢,下面是问题代码:

<span style="font-size:12px;">import tensorflowas tf

import matplotlib.imageas mpimg

import matplotlib.pyplotas plt

 

#加载图像

filename ="MarshOrchid.jpg"

image = mpimg.imread(filename)

 

#创建tensorflow变量

x = tf.Variable(image,name='x')

 

model = tf.initialize_all_variables()
</span>

 

来来回回害怕自己拼写错误复制粘贴好几次,字符拼了一遍又一遍,到网上查说是jpg的包未安装,可是这个明显在我这里是不成立的。因为刚刚已经加载成功了。毕竟现在tensorflow的错误解决方案不多,只好自己动手了。找来找去,发现当导入tensorflow库时imread就会出现错误,只要把tensorflow去掉是不会提示有错误的。OK,现在错误定位出来了,是tensorflow的问题。可是我们不能因此把tensorflow给删掉呀,删了不就是本末倒置了嘛,我们现在就想用tensorflow来解决问题的,去掉就啥都没有了。

言归正传,找到是import tensorflow as tf 这句话导致的错误。可又不能去掉,工科生的本能就是——不断的尝试解决方案。所以当时就抱着试试的态度将import tensorflow as tf 的位置由最开始的位置,调到了后面的位置,如下所示:

<span style="font-size:12px;">import matplotlib.imageas mpimg

import matplotlib.pyplotas plt

import tensorflowas tf
</span>

调完之后就不会再报那个错误了。可是这我就好奇了,为了解释我的好奇,我将我的代码全部粘出,有懂的还请指教指教。

<span style="font-size:12px;">import matplotlib.imageas mpimg

import matplotlib.pyplotas plt

import tensorflowas tf

 

#加载图像

filename ="MarshOrchid.jpg"

image = mpimg.imread(filename)

 

#创建tensorflow变量

x = tf.Variable(image,name='x')

 

model = tf.initialize_all_variables()

 

with tf.Session()as session:

    x = tf.transpose(x, perm=[1,0,2])

    session.run(model)

    result = session.run(x)

  

plt.imshow(image)

plt.show()
</span>

按照刚刚那个错误的解决逻辑,是按照运行属性来排列import导入库的,那该程序的运行顺序为:image--->tensorflow---->pyplot库,那我相应的调整其import,将tensorflow放在了pyplot前面,竟然会报错误,放在后面就没有关系了。我现在唯一能让自己想通的就是imagepyplot属于一家,均为matplotlib。此问题待大牛或者我再深入了解之后再做深入回答。

在个人看来,import其实就是相当于C 语言中的头文件,受到C的影响,在写Python时直观的也认为import导入的库是没有先后顺序的。这就是这个问题出现的根本。在Python中,就目前看来,其import导入的库是有先后顺序的。



6、

python报错<type 'exceptions.TypeError'>: 'NoneType' object is not callable


这个错误分为两种情况,一种情况是运行时出现这个错误,另一种情况是运行时不弹出错误,但是在调试代码时出现错误。下面根据两方面来探讨解决方法。


无论是调试还是运行,如果单从错误看来是你使用的对象没有定义,你需要检查程序中函数是否写正确。这一点是必须要做的。


情况1:如果在运行时出现这个错误,这很有可能是你程序中某个单词拼写错误了,有时候函数名错误是不会出现红色错误提示符的。则可根据下方给出的错误提示中的print type(XXX)找到问题所在,因为xxx 就是代表调用出错的对象的名称,就是报错日志所在行的代码被调用的对象的名称。

情况2:在运行时不出现错误,调试时出错误。作为程序猿,少则百行,多则数万行的代码都是要写得,有时为了减少错误,很多人都会选择编写完一个功能函数运行一下或者调试一下来看看整体有无拼写错误。本人就喜欢有这个习惯。今天写完一个函数,点运行时错点了调试,当时感觉反正大家都差不多,调试就调试吧,然而调试时竟然蹦出这个错误,查了半天也不知为什么,因为这个错误蹦出的后半段与情况1蹦出的错误不同,整体错误是:“Exception TypeError: TypeError("'NoneType' object is not callable",) in <function _remove at 0x7f44bbc436e0> ignored”试了半天才知道,原来我现在调试的程序中只有定义好的函数,并没有对函数进行调用,就是因为这个原因导致你在调试时出错误。所以你只要加上调用那部分函数的代码就没有问题了。

  • 6
    点赞
  • 5
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值