tensorflow - Keras中VDSR的剩余损失计算
问题描述
我正在使用带有后端张量流的 Keras。我从 ( https://github.com/GeorgeSeif/VDSR-Keras )下载了非常深的超分辨率 cnn 的代码,并尝试训练我自己的模型。该模型是用均方误差 (mse) 编译的,但原始模型有残余损失。如何在 keras 中实现残差损失。剩余损失可以计算为
loss = (label - input_image - predected_image)^2
解决方案
VDSR 模型如下:
input_img = Input(shape=IMG_SIZE)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(input_img)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(model)
model = Activation('relu')(model)
model = Conv2D(1, (3, 3), padding='same', kernel_initializer='he_normal')(model)
res_img = model
output_img = add([res_img, input_img])
model = Model(input_img, output_img)
模型的输入图像是一个图像块块(一个块的分辨率为 41 x 41 像素,8 位/像素)。
在您的公式中: loss = (label - input_image - predected_image)^2 =(label - (input_image + predected_image))^2) 其中 input_image + predected_image 它是 newtork 输出。网络学习校正(line output_img = add([res_img, input_img])),以克服双三次插值的影响,这不是图像超分辨率的最佳方法。
推荐阅读
- python - 创建第三个 csv,其中包含一个 csv 中不存在于另一个 csv 中的行
- javascript - 我的文本编辑器生成额外的大括号,如何摆脱它
- jenkins - 如何从 Jenkins 管道中的函数为“allOf”返回值
- java - 类型无法解析。它从所需的 .class 文件中间接引用
- javascript - 如何在 c3js.org 中为多个 XY 折线图添加字幕?
- javascript - 是否可以将 .includes 用于关联数组/哈希数组?
- python - numpy均值和总和不可置换
- wpf - DataGrid comboBoxItems 行为怪异
- hibernate - 如何在@post端点中持久化数据
- tree - BST有效性的错误解决方案