gpt4 book ai didi

python - 在 Keras 中使用 SSIM 损失函数

转载 作者:行者123 更新时间:2023-12-03 23:35:53 24 4
gpt4 key购买 nike

我需要使用 Sewar 的 SSIM 作为损失函数来比较我的模型的图像。

当我尝试编译我的模型时出现错误。我导入函数并编译模型,如下所示:

from sewar.full_ref import ssim
...
model.compile('ssim', optimizer=my_optimizer, metrics=[ssim])

我明白了:
File "/media/merry/merry32/train.py", line 19, in train
model.compile(loss='ssim', optimizer=opt, metrics=[ssim])
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/keras/engine/training.py", line 451, in compile
handle_metrics(output_metrics)
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/keras/engine/training.py", line 420, in handle_metrics
mask=masks[i])
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/keras/engine/training_utils.py", line 404, in weighted
score_array = fn(y_true, y_pred)
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/sewar/full_ref.py", line 143, in ssim
MAX = np.iinfo(GT.dtype).max
File "/home/merry/anaconda3/envs/merry_env/lib/python3.7/site-packages/numpy/core/getlimits.py", line 506, in __init__
raise ValueError("Invalid integer data type %r." % (self.kind,))
ValueError: Invalid integer data type 'O'.

我也可以这样写:
model.compile(ssim(), optimizer=my_optimizer, metrics=[ssim()])

但是后来我收到了这个错误(显然):
TypeError: ssim() missing 2 required positional arguments: 'GT' and 'P'

我只是想对 mean_sqeared_error 做同样的事情,但使用 SSIM,就像这样(无需向其传递参数即可完美运行):
model.compile('mean_squared_error', optimizer=my_optimizer, metrics=['mse'])

关于如何使用此函数进行编译的任何想法?

最佳答案

  • 您可以使用 tf.image.ssim计算两个图像之间的 SSIM 索引。
  • 由于训练是在一批图像上进行的,我们将使用该批次中所有图像的 SSIM 值的平均值作为损失值
  • 我们的模型将返回一个图像(基于所使用的 CNN 层的某种大小,这同样基于输入和预期的输出图像尺寸)。

  • 示例工作代码
    from keras.models import Sequential
    from keras.layers import Dense, Conv2D, Flatten
    import numpy as np
    import tensorflow as tf

    # Loss functtion
    def ssim_loss(y_true, y_pred):
    return tf.reduce_mean(tf.image.ssim(y_true, y_pred, 2.0))

    # Model: Input Image size: 32X32X1 output Image size: 28X28X1
    # check model.summary
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3, 3),
    activation='relu',
    input_shape=(32,32,1)))
    model.add(Conv2D(1, kernel_size=(3, 3),
    activation='relu'))

    model.compile(optimizer='adam', loss=ssim_loss, metrics=[ssim_loss, 'accuracy'])

    # Train
    model.fit(np.random.randn(10,32,32,1), np.random.randn(10,28,28,1))

    关于python - 在 Keras 中使用 SSIM 损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357146/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com