记录踩过的坑-Keras

目录

WARNING:tensorflow:Can save best model only with val_accuracy available, skipping

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,每次都要重新下载

动态分配显存

释放显存


WARNING:tensorflow:Can save best model only with val_accuracy available, skipping

keras.callbacks.ModelCheckpoint中参数名的问题,有的用的是val_acc,有的用的是val_accuracy,要实际看

或者换一个监控项,比如改成monitor='val_loss'

ValueError: Cannot create group in read only mode

使用keras加载训练好的模型报的错。这是因为保存模型的时候只保存了权重,即使用的是save_weights,而不是save,因此读的时候也必须是load_weights,而不是load_model

could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED

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)

keras保存的h5模型,load_model时报错:AttributeError: ‘str‘ object has no attribute ‘decode‘ 

我是用的tf 1.14.0、keras 2.2.5

h5py模块的版本问题,改用2.10版本

pip install h5py==2.10

Windows中Keras预训练模型文件位置

C:\Users\用户名\.keras\models

Linux中Keras预训练模型文件位置

~/.keras/models/

Karas报错ValueError:xxx is not an element of this graph

因为用到了多线程。

加载模型的时候顺便做一下初始化,这样在线程中调用模型的时候避免出错。

model = load_model(模型的路径)

print ("test model")

print(model.predict(np.zeros((模型的结构,比如1,20,224,224,3))))

print ("test done")

keras 2.2.4中找不到resnet101、152

from keras.applications里只有resnet50

from keras_applications里有resnet_v2,里面有101、152

 AttributeError: 'NoneType' object has no attribute 'image_data_format'

我用keras的resnet101时出的错。

在用的时候加四个参数。

 backend=keras.backend, layers=keras.layers,  models=keras.models,  utils=keras.utils

pad_sequences

keras pad_sequences默认int 32。

如果你的数据是浮点型,需要指明dtype='float32'

回调函数(callback)

模型检查点(model checkpointing):在训练过程中的不同时间点保存模型的当前权重

提前终止(early stopping):如果验证损失不再改善,则中断训练,同时保存在训练过程中得到的最佳模型

在训练过程中动态调节某些参数值,如学习率

在训练过程中记录训练指标和验证指标,或将模型学到的表示可视化

GlobalAveragePooling2D error 'Tensor' object has no attribute 'lower'

正确写法:GlobalMaxPooling2D()(i)

错误写法:GlobalMaxPooling2D(i)

加载resnext模型

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)

EarlyStopping’ object has no attribute '_implements_train_batch_hooks’

版本问题。

将from keras.callbacks import EarlyStopping改为:
from tensorflow.keras.callbacks import EarlyStopping

加载预训练的NasNet Large,每次都要重新下载

在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内存.

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值