- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Keras 中定义自定义损失函数来编译 CNN 网络时,我遇到两个主要问题。我正在通过 CNN 进行 2D 图像配准(对齐一对 2D 图像以使其最适合)。网络的输出将是一个 5 维浮点型数组,作为网络的预测。 (1 缩放、2 平移和 2 x 和 y 上的缩放)。配准问题有两个主要的损失函数(以及度量),称为骰子系数和 TRE(目标配准误差,是医生标记的成对标志点之间的距离之和)。顺便说一句,我需要实现这两个损失函数。对于骰子系数:
1-首先,我需要知道优化器正在考虑哪个样本,以便我可以读取该样本的内容并计算 Dice,而基于自定义损失函数中仅定义了 y_true 和 y_pred关于 Keras 文档。
2-我编写以下代码作为我的损失函数:1)首先,扭曲第一个图像,2)其次,将两个图像二进制化(每个样本由 2 个图像组成:一个是移动图像,另一个是固定图像)图像),3)第三,返回图像对(扭曲和固定)之间的 Dice 系数。
由于自定义损失函数的参数仅限于 y_true 和 y_pred,并且所考虑的样本没有索引,并且我的问题是无监督的(即不需要任何标签),因此我使用了样本的索引馈送到CNN作为标签,并尝试使用y_true[0]作为CNN考虑的训练样本的索引,并将batch-size设置为1。
def my_loss_f(y_true,y_pred):
from scipy.spatial import distance as dis
a = y_true[0]
nimg1=warping(Train_DataCT[a],y_pred) # line 83 in CNN1.py
return dis.dice(BW(nimg1).flatten(),BW(Train_DataMR[a]).flatten())
def warping(nimg,x):
import scipy.ndimage as ndi
nimg1 = ndi.rotate(nimg, x[0], reshape=False)
nimg1 = ndi.shift(nimg1, [x[1], x[2]])
nimg1 = clipped_zoom(nimg1, [x[3], x[4]])
return nimg1
def BW(nimg1):
hist = ndi.histogram(nimg1, 0, 255, 255)
som = ndi.center_of_mass(hist)
bwnimg = np.where(nimg1 > som, 1, 0)
return bwnimg
但是,我不断收到如下不同的错误。有人告诉我使用 TensorFlow 或 Keras 后端重写我自己的损失函数,但我需要 Numpy 和 SciPy,无法跳入这种低级编程,因为我完成项目的时间非常有限。
主要问题是 y_true 为空(它只是一个占位符,而不是具有值的实际变量),并且不能用作 Train_DataCT[y_true[0]] 的索引,因为错误是:索引应该是整数, :, bool 值等等以及张量不能用作索引!我尝试了多种方法,例如将 y_true 转换为 ndarray 或使用 y_true.eval() 来初始化它,但我得到了错误: session 错误,没有默认 session 。
先谢谢了,请有人帮助我。
<小时/>Traceback (most recent call last):
File "D:/Python/Reg/Deep/CNN1.py", line 83, in <module>
model.compile(optimizer='rmsprop',loss=my_loss_f)
File "C:\Users\Hamidreza\Anaconda3\lib\site-packages\keras\engine\training.py", line 342, in compile
sample_weight, mask)
File "C:\Users\Hamidreza\Anaconda3\lib\site-packages\keras\engine\training_utils.py", line 404, in weighted
score_array = fn(y_true, y_pred)
File "D:/Python/Reg/Deep/CNN1.py", line 68, in my_loss_f
nimg1=warping(Train_DataCT[1],y_pred)
File "D:/Python/Reg/Deep/CNN1.py", line 55, in warping
nimg1 = ndi.rotate(nimg, x[0], reshape=False)
File "C:\Users\Hamidreza\Anaconda3\lib\site-packages\scipy\ndimage\interpolation.py", line 703, in rotate
m11 = math.cos(angle)
TypeError: must be real number, not Tensor
Process finished with exit code 1
<小时/>
最佳答案
您的损失函数应该适用于您后端的张量类型。如果您使用带有 tf 后端的 keras,以下函数可能有助于组合高级 numpy/scipy 函数和张量:
https://www.tensorflow.org/api_docs/python/tf/numpy_function?version=stable
此外,您还可以在下面找到更多有用的内容:
How to make a custom activation function with only Python in Tensorflow?
关于python - 用于编译网络 (CNN) 的 Keras 自定义损失函数中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59358813/
R-CNN、fast R-CNN、faster R-CNN 和 YOLO 在以下方面有什么区别: (1) 同一图像集上的精度 (2) 给定 SAME IMAGE SIZE,运行时间 (3) 支持安卓移
我试图比较 CNN 模型和组合 CNN-SVM 模型进行分类的准确性结果。然而我发现 CNN 模型比 CNN-SVM 组合模型具有更好的准确性。这是正确的还是可能发生? 最佳答案 这取决于很多因素,但
我知道这可能是一个愚蠢的问题,但我对机器学习和人工神经网络有点陌生。 深度卷积神经网络和密集卷积神经网络有什么区别吗? 提前致谢! 最佳答案 密集 CNN 是深度 CNN 的一种,其中每一层都与比自身
我正在使用预训练的 CNN 从图片中提取特征。使用这些特征作为新 CNN/NN 的输入有意义吗?以前做过吗?我很高兴得到答复。 最佳答案 这称为微调。这是非常常用的。通常,我们会删除 VGG 或类似网
与 caffe 合作几个月后,我已经能够成功地训练我自己的模型。例如,比我自己的模型更进一步,我已经能够用 1000 个类来训练 ImageNet。 现在在我的项目中,我试图提取我感兴趣的区域。之后我
我正在使用下面的 LeNet 架构来训练我的图像分类模型,我注意到每次迭代都不会提高训练和验证的准确性。这方面的任何专家都可以解释可能出了什么问题吗? 训练样本 - 属于 2 个类别的 110 张图像
我使用剩余连接实现了以下 CNN,用于在 CIFAR10 上对 10 个类进行分类: class ConvolutionalNetwork(nn.Module): def __init__(se
我有一组二维输入数组 m x n即 A,B,C我必须预测两个二维输出数组,即 d,e我确实有预期值。如果您愿意,您可以将输入/输出视为灰色图像。 由于空间信息是相关的(这些实际上是 2D 物理域)我想
我正在开发一个交通跟踪系统,该系统可以分析已经收集的视频。我正在使用opencv,线程,pytorch和dectron2。为了加快从opencv抓帧的速度,我决定使用Thread,该线程运行一个循环,
我正在解决一个问题,需要我构建一个深度学习模型,该模型必须基于某些输入图像输出另一个图像。值得注意的是,这两个图像在概念上是相关的,但它们没有相同的尺寸。 起初我认为具有最终密集层(其参数是输出图像的
我正在制作一个卷积网络来预测 3 类图像:猫、狗和人。我训练了又训练它,但是当我传递猫图像来预测时,它总是给出错误的输出。我尝试了其他猫的照片,但结果没有改变。对于人和狗来说没有问题,只是对于猫来说。
我接到一项任务,要实现一个卷积神经网络,该网络可以评估 MNIST dataset 中找到的手写数字。网络架构如下所示: 我已经实现了一个与架构相匹配的 CNN,不幸的是它的准确率只有 10% 左右。
我正在尝试在 Keras 中重新创建 CNN 来对点云数据进行分类。 CNN 在 this 中描述。纸。 网络设计 这是我当前的实现: inputs = Input(shape=(None, 3))
我想为有 300 个类的数据集设计 CNN。我已经用以下模型对两个类(class)进行了测试。它具有良好的准确性。 model = Sequential([ Conv2D(16, 3, padding
我成功训练了 CNN 模型,但是当我向模型提供图像以使其预测标签时,出现错误。 这是我的模型(我正在使用 saver.restore 恢复它)... # load dataset mnist = in
我恢复了用于人脸检测的预训练模型,该模型一次获取单个图像并返回边界框。如果这些图像具有不同的尺寸,如何才能获取一批图像? 最佳答案 您可以使用tf.image.resize_images方法来实现这一
我有大约 8200 张图像用于人脸检测任务。其中 4800 个包含人脸。其他 3400 张图像包含 3D 人脸面具(由橡胶/ latex 制成)、卡通人脸、猴子脸的图像。我想检测给定的图像是否包含真实
我有一组合成噪声图像。示例如下: 我还有它们相应的干净文本图像作为我的地面实况数据。下面的例子: 两个图像的尺寸为4918 x 5856。它的大小是否适合训练我的执行图像去噪的卷积神经网络?如果没有,
大家好! 由于我正在尝试制作一个将灰度图像转换为 RGB 图像的全卷积神经网络,所以我想知道是否可以在不同大小的图像(不同的像素和比率)上训练和测试模型。通常你只会下采样或上采样,这是我不想做的。我听
我正在研究 CNN 特征的早期和晚期融合。我从 CNN 的多层中获取了特征。对于早期融合,我捕获了三个不同层的特征,然后水平连接它们 F= [F1' F2' F3']; 对于后期融合,我正在阅读此 p
我是一名优秀的程序员,十分优秀!