目录
ValueError: Cannot create group in read only mode
could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
keras保存的h5模型,load_model时报错:AttributeError: ‘str‘ object has no attribute ‘decode‘
Windows中Keras预训练模型文件位置
Linux中Keras预训练模型文件位置
Karas报错ValueError:xxx is not an element of this graph
keras 2.2.4中找不到resnet101、152
AttributeError: 'NoneType' object has no attribute 'image_data_format'
pad_sequences
回调函数(callback)
GlobalAveragePooling2D error 'Tensor' object has no attribute 'lower'
加载resnext模型
EarlyStopping’ object has no attribute '_implements_train_batch_hooks’
加载预训练的NasNet Large,每次都要重新下载
动态分配显存
释放显存
使用keras加载训练好的模型报的错。这是因为保存模型的时候只保存了权重,即使用的是save_weights,而不是save,因此读的时候也必须是load_weights,而不是load_model
cuda、cudnn版本都正确的前提下,原因是GPU占用。
设置动态分配即可。
import tensorflow as tf
from keras import backend as K
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
K.set_session(sess)
我是用的tf 1.14.0、keras 2.2.5
h5py模块的版本问题,改用2.10版本
pip install h5py==2.10
C:\Users\用户名\.keras\models
~/.keras/models/
因为用到了多线程。
加载模型的时候顺便做一下初始化,这样在线程中调用模型的时候避免出错。
model = load_model(模型的路径)
print ("test model")
print(model.predict(np.zeros((模型的结构,比如1,20,224,224,3))))
print ("test done")
from keras.applications里只有resnet50
from keras_applications里有resnet_v2,里面有101、152
我用keras的resnet101时出的错。
在用的时候加四个参数。
backend=keras.backend, layers=keras.layers, models=keras.models, utils=keras.utils
keras pad_sequences默认int 32。
如果你的数据是浮点型,需要指明dtype='float32'
模型检查点(model checkpointing):在训练过程中的不同时间点保存模型的当前权重
提前终止(early stopping):如果验证损失不再改善,则中断训练,同时保存在训练过程中得到的最佳模型
在训练过程中动态调节某些参数值,如学习率
在训练过程中记录训练指标和验证指标,或将模型学到的表示可视化
正确写法:GlobalMaxPooling2D()(i)
错误写法:GlobalMaxPooling2D(i)
keras版本要注意。我之前用2.0.5会报错,升级成2.4.0就可以了。
例子:
cnn = resnext.ResNeXt101(weights=pre_weights,
include_top=False,
input_shape=(size, size, 3),
backend=keras.backend,
layers=keras.layers,
models=keras.models,
utils=keras.utils)
版本问题。
将from keras.callbacks import EarlyStopping改为:
from tensorflow.keras.callbacks import EarlyStopping
在GitHub上下载得到的文件名字是NasNet-large-no-top.h5
需要将其改为nasnet_large_no_top.h5,再丢到.keras/models/文件夹里
TensorFlow 2.0之前
import tensorflow as tf
import keras.backend.tensorflow_backend as K
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)
K.set_session(sess)
TensorFlow 2.0之后
import tensorflow as tf
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.compat.v1.Session(config = config)
tf.compat.v1.keras.backend.set_session(sess)
from keras import backend as K
K.clear_session()
但是,上述代码并不适用于所有人
如果上述方法不适合,请尝试以下方法(需要先安装numba库):
from numba import cuda
cuda.select_device(0)
cuda.close()
其背后的原因是:Tensorflow只是为GPU分配内存,而CUDA负责管理GPU内存.
如果在用K.clear_session()清除了所有图形后,CUDA以某种方式拒绝释放GPU内存,那么您可以使用cuda库直接控制CUDA以清除GPU内存.