一、tensorflow checkpoint報錯
在調用tf.train.Saver#save時,如果使用的路徑是絕對路徑,那么保存的checkpoint里面用的就是絕對路徑;如果使用的是相對路徑,那么保存的checkpoint里面用的就是相對路徑。正確的方法應該是使用相對路徑進行保存,這樣才能保證較好的可移植性。
如果使用相對路徑,復制到本地之后,會報找不到文件的錯誤。
tensorflow.python.framework.errors_impl.NotFoundError: FindFirstFile failed for:
一個絕對路徑...... : ϵͳ\udcd5Ҳ\udcbb\udcb5\udcbdָ\udcb6\udca8\udcb5\udcc4·\udcbe\udcb6\udca1\udca3
; No such process
解決方法:手動修改checkpoint文件,checkpoint文件是一個文本文件。
以上結論可以通過以下代碼進行驗證。
import tensorflow as tf
import os
a = tf.Variable(3)
saver = tf.train.Saver(tf.global_variables(), )
with tf.Session()as sess:
sess.run(tf.global_variables_initializer())
saver.save(sess, os.path.abspath('gen/test/'))
二、奇怪的six
編Tensorflow編了好幾個程序了,都是正常運行。
為了記錄每一次調參的結果和對應的代碼,我的python文件命名為one.py,two.py,three.py等。
直到six.py時,報錯了。
from google.protobuf import descriptor as _descriptor
File "C:\anaconda\lib\site-packages\google\protobuf\descriptor.py", line 37, in <module>
import six
File "C:\Users\weidiao\Desktop\python實驗室\人臉識別卷積神經網絡\six.py", line 24, in <module>
x = tf.placeholder(tf.float32, [None, IMAGE_SIZE, IMAGE_SIZE, NUM_CHANNELS], name='x-input')
AttributeError: module 'tensorflow' has no attribute 'placeholder'
我還以為程序運行着把tensorflow玩壞了。
其實是因為protobuf這個包中引用了six.py,而我的six.py把正確的six.py給覆蓋了。
看見沒,這就是Python使用不規范包名的后果,在Java中寫了一堆org、com並不白寫,Java中包的定位更精確、更無二義性。再過幾十年,Python中的全部包幾乎好名字都被占了,那時人們再想給Python寫個庫的時候就要哭了。
三、tensorflow報錯:Unsupported feed type
File "C:\anaconda\lib\site-packages\tensorflow\python\training\monitored_session.py", line 827, in run
return self._sess.run(*args, **kwargs)
File "C:\anaconda\lib\site-packages\tensorflow\python\client\session.py", line 889, in run
run_metadata_ptr)
File "C:\anaconda\lib\site-packages\tensorflow\python\client\session.py", line 1120, in _run
feed_dict_tensor, options, run_metadata)
File "C:\anaconda\lib\site-packages\tensorflow\python\client\session.py", line 1317, in _do_run
options, run_metadata)
File "C:\anaconda\lib\site-packages\tensorflow\python\client\session.py", line 1336, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InternalError: Unsupported feed type
使用tf.contrib.learn.DNNClassifier分類器進行分類時,報出如上異常。
解決方法是:盡量使用numpy中的默認類型,如np.int,np.float等,而不要使用np.int32,np.float32.
