Python 非类型对象没有属性endwith(Tensorflow)
我试图创建一个RNN,该RNN将从莎士比亚文学中生成文本,正如tensorflow课程所教: 当我尝试加载权重时,我的程序将崩溃,并显示错误消息:AttributeError:“NoneType”对象没有属性“endswith” 以下是导致程序崩溃的代码行:Python 非类型对象没有属性endwith(Tensorflow),python,tensorflow,keras,recurrent-neural-network,nonetype,Python,Tensorflow,Keras,Recurrent Neural Network,Nonetype,我试图创建一个RNN,该RNN将从莎士比亚文学中生成文本,正如tensorflow课程所教: 当我尝试加载权重时,我的程序将崩溃,并显示错误消息:AttributeError:“NoneType”对象没有属性“endswith” 以下是导致程序崩溃的代码行: model.load_weights(tf.train.latest_checkpoint(check_dir)) 这是我的代码的粘贴箱: 以下是完整的错误消息: Traceback (most recent call last):
model.load_weights(tf.train.latest_checkpoint(check_dir))
这是我的代码的粘贴箱:
以下是完整的错误消息:
Traceback (most recent call last):
File "D:/Python/PycharmProjects/untitled/Shakespeare.py", line 118, in <module>
main()
File "D:/Python/PycharmProjects/untitled/Shakespeare.py", line 108, in main
model.load_weights(tf.train.latest_checkpoint(check_dir))
File "C:\Users\marco\venv\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 182, in load_weights
return super(Model, self).load_weights(filepath, by_name)
File "C:\Users\marco\venv\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 1335, in load_weights
if _is_hdf5_filepath(filepath):
File "C:\Users\marco\venv\lib\site-packages\tensorflow_core\python\keras\engine\network.py", line 1645, in _is_hdf5_filepath
return (filepath.endswith('.h5') or filepath.endswith('.keras') or
AttributeError: 'NoneType' object has no attribute 'endswith'
回溯(最近一次呼叫最后一次):
文件“D:/Python/PycharmProjects/untitled/Shakespeare.py”,第118行,在
main()
文件“D:/Python/PycharmProjects/untitled/Shakespeare.py”,第108行,主视图
型号.装载重量(tf.列车.最新检查点(检查方向))
文件“C:\Users\marco\venv\lib\site packages\tensorflow\u core\python\keras\engine\training.py”,第182行,在load\u weights中
返回super(Model,self)。加载权重(filepath,按名称)
文件“C:\Users\marco\venv\lib\site packages\tensorflow\u core\python\keras\engine\network.py”,第1335行,在load\u weights中
如果_是_hdf5_文件路径(文件路径):
文件“C:\Users\marco\venv\lib\site packages\tensorflow\u core\python\keras\engine\network.py”,第1645行,在文件路径中是hdf5
return(filepath.endswith('.h5')或filepath.endswith('.keras')或
AttributeError:“非类型”对象没有属性“endswith”
我在另一个教程中遇到了同样的问题。从我所能看出,Tensorflow特定调用和Tensorflow.Keras调用之间似乎存在差异
我在另一篇文章中提到了使用KerasAPI保存和加载KerasAPI,这对我来说很有意义
我希望这有帮助
我用过:
callbacks = [
tf.keras.callbacks.TensorBoard(log_dir='.'+os.sep+'logs',
histogram_freq=0,
embeddings_freq=0,
update_freq='epoch',
profile_batch=0),
#added this (which doesn't profile) to get the example to to work
#When saving a model's weights, tf.keras defaults to the checkpoint format.
#Pass save_format='h5' to use HDF5 (or pass a filename that ends in .h5).
tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_prefix,
#save_weights_only=True,
verbose=1),
PrintLR()
]
然后使用以下命令显式加载模型:
#tutorials indicates to save weights only but I found this to be a problem / concern between
#tensorflow and keras calls, so save the whole model (who cares anyway)
#model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))
#load the specific model name
model=tf.keras.models.load_model(checkpoint_dir+os.sep+'ckpt_12.h5')
eval_loss, eval_acc = model.evaluate(eval_dataset)
print('Eval loss: {}, Eval Accuracy: {}'.format(eval_loss, eval_acc))
我刚刚遇到了同样的问题。在我的案例中,出现此错误消息的原因是包含模型训练检查点的目录的路径无效。因此,我建议检查此行
check_dir = './training_checkpoints'
您的代码是正确的。您至少可以尝试将其更改为包含检查点数据的目录的完整路径
check_dir = '/full/path/to/training_checkpoints'