《21個專案玩轉深度學習》在spyder3.6上跑2.7遇到的問題彙總(更新中...)
在spyder3.6上跑2.7遇到的問題彙總
------------------------------------------------------
1、NameError: name 'xrange' is not defined
在Python 3中,range()的實現方式與xrange()函式相同,所以就不存在專用的xrange( )
所以,如果直接用xrange的話會報錯
解決:直接將xrange改成range
參考:https://blog.csdn.net/u010412719/article/details/47088095
2、TypeError: 'range' object does not support item assignment
原來的程式是這樣的:
if random is None:
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i+1)
x[i], x[j] = x[j], x[i]
查了資料發現說是因為:
range() 返回的是“range object”,而不是實際的list 值。
將上面例子的程式碼: a = range(0,N)改為a = list(range(0,N)) 就好啦!
我以為是把for迴圈的那句話改成 for i in reversed(list(range(1,len(x)))):
但是改完還是報相同的錯誤
其實是改成這樣:
if random is None: randbelow = self._randbelow # for i in reversed(range(1, len(x))): x = list(range(1,len(x))) #添加了這一句 for i in reversed(range(1,len(x))): j = randbelow(i+1) x[i], x[j] = x[j], x[i]
之後會報一些xrange的錯誤,參見上一條
再之後會報一個錯誤:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence
我找了一些辦法嘗試解決,目前以失敗告終,...
3、UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd5' in position 1900: surrogates not allowed
原來的程式是這樣的
# 使用下面的語句將之匯入
model_fn = 'tensorflow_inception_graph.pb'
with tf.gfile.FastGFile(model_fn, 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
可以通過更改檔案的讀取方式解決
在程式開頭先加上一句import:
import codecs
然後把with那句改成這樣:
with codecs.open(model_fn,'r','gbk',errors='ignore')as f: