keras 3D UnetCNN训练时出现的segmentation fault的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keras 3D UnetCNN训练时出现的segmentation fault的问题相关的知识,希望对你有一定的参考价值。
参考技术A 最近做3D UnetCNN 医学图像的分割。按照GitHub中的 https://github.com/ellisdg/3DUnetCNN 官方操作,在执行 python train.py和python train_isensee2017.py时,都会出现segmentation fault的问题。查看了很多网上的资料,始终和自己遇到的问题有所差异。1)有些人在CPU下可以正常运行,多GPU就不行,有的是单GPU可以,多GPU不行。所以怀疑是Keras多GPU设置的问题,但是程序在CPU和单GPU下仍然会出现segmentation fault的问题。
2)有时候,cudnn的版本问题也会导致segmentation fault的问题。我尝试了几个版本的cudnn,发现问题依旧存在。
3)怀疑是数据本身的问题,导致访问内存出错,尝试了Brats2018和Brats2017,结果都一样。
4)调试程序,用print语句找错误位置,程序运行到Epoch 1/500结束,始终没有找到相应的打印语句。最后找到
model.fit_generator(generator=training_generator,
steps_per_epoch=steps_per_epoch,
epochs=n_epochs,
validation_data=validation_generator,
validation_steps=validation_steps,
callbacks=get_callbacks(model_file,
initial_learning_rate=initial_learning_rate,
learning_rate_drop=learning_rate_drop,
learning_rate_epochs=learning_rate_epochs,
learning_rate_patience=learning_rate_patience,
early_stopping_patience=early_stopping_patience) )
找到fit_generator()函数的定义,发现参数位置是不对的callbacks在前面
应该是:
model.fit_generator(generator=training_generator,
steps_per_epoch=steps_per_epoch,
epochs=n_epochs,
callbacks=get_callbacks(model_file,
initial_learning_rate=initial_learning_rate,
learning_rate_drop=learning_rate_drop,
learning_rate_epochs=learning_rate_epochs,
learning_rate_patience=learning_rate_patience,
early_stopping_patience=early_stopping_patience),
validation_data=validation_generator,
validation_steps=validation_steps,
use_multiprocessing = True )
程序可以正常运行一个epoch,不会出现segmentation fault的问题。
但是程序还是未能正常运行。最后发现是Keras版本的问题,我的版本是2.2.4,降级到2.1.2就可以了。
使用自定义损失函数编译 Keras 模型时出现 TypeError
【中文标题】使用自定义损失函数编译 Keras 模型时出现 TypeError【英文标题】:TypeError while compiling Keras model with custom loss function 【发布时间】:2020-09-07 09:32:32 【问题描述】:我已经训练了一个具有自定义损失函数 BinaryCrossEntropy 的模型,使用 Jaccard,使用分段模型库,当我尝试加载和编译模型以开始预测时,我得到了这个错误:
model = compile(optimizer='adam', loss=bce_jaccard_loss, metrics=['iou_score'])
TypeError: compile() missing required argument 'source' (pos 1)
请问我该如何解决?
import keras
import segmentation_models as sm
from segmentation_models.losses import bce_jaccard_loss
from segmentation_models.metrics import iou_score
model = keras.models.load_model("ResNet_34_Aug.h5", compile = False)
model = compile(optimizer='adam', loss=bce_jaccard_loss, metrics=['iou_score'])
【问题讨论】:
【参考方案1】:整个问题出在代码的最后一行,缺少的必需参数“源”(位置 1)是模型本身,所以我已将其修复为:
model.compile(optimizer='adam', loss=bce_jaccard_loss, metrics=['iou_score'])
【讨论】:
以上是关于keras 3D UnetCNN训练时出现的segmentation fault的问题的主要内容,如果未能解决你的问题,请参考以下文章
将 gridsearchCV 与 Keras RNN-LSTM 一起使用时出现尺寸错误
在构建和训练 3D Keras U-NET 时遇到 ValueError