gpt4 book ai didi

tensorflow - 在 {TF 2.0.0-beta1 上使用 tflite_convert 时为 "Unkown (custom) loss function"; Keras} 模型

转载 作者:行者123 更新时间:2023-11-30 08:42:10 25 4
gpt4 key购买 nike

摘要

我的问题由以下人员组成:

  • 展示我的项目、工作环境和工作流程的环境
  • 具体问题
  • 我的代码的相关部分
  • 我尝试解决问题的解决方案
  • 问题提醒

上下文

我编写了原始超分辨率 GAN 降级版本的 Python Keras 实现。现在我想使用 Google Firebase 机器学习套件对其进行测试,方法是将其托管在 Google 服务器中。这就是为什么我必须将 Keras 程序转换为 TensorFlow Lite 程序。

环境和工作流程(有问题)

我正在 Google Colab 工作环境上训练我的程序:在那里,我安装了TF 2.0.0-beta1(这个选择是由于这个不正确的答案: https://datascience.stackexchange.com/a/57408/78409 )。

工作流程(和问题):

  1. 我在本地编写 Python Keras 程序,请记住它将在 TF 2 上运行。因此我使用 TF 2 导入,例如:from tensorflow.keras.optimizers import Adam以及from tensorflow.keras.layers import Conv2D, BatchNormalization

  2. 我将代码发送到我的云端硬盘

  3. 我使用 Google Colab Notebook:TF 2 运行时没有任何问题。

  4. 我在云端硬盘中获取输出模型,然后下载它。

  5. 我尝试通过执行以下 CLI 将此模型转换为 TFLite 格式:tflite_convert --output_file=srgan.tflite --keras_model_file=srgan.h5:此处出现问题

问题

之前的 CLI 不会输出从 TF (Keras) 模型转换而来的 TF Lite 模型,而是输出以下错误:

ValueError: Unknown loss function:build_vgg19_loss_network

函数 build_vgg19_loss_network 是我实现的自定义损失函数,必须由 GAN 使用。

引发此问题的部分代码

呈现自定义损失函数

自定义损失函数的实现如下:

def build_vgg19_loss_network(ground_truth_image, predicted_image):
loss_model = Vgg19Loss.define_loss_model(high_resolution_shape)
return mean(square(loss_model(ground_truth_image) - loss_model(predicted_image)))

使用我的自定义损失函数编译生成器网络

generator_model.compile(optimizer=the_optimizer, loss=build_vgg19_loss_network)

为了解决问题我尝试做什么

  1. 正如我在 StackOverflow 上阅读的那样(链接位于本问题开头),TF 2 被认为足以输出 Keras 模型,该模型将由我的 tflite_convert CLI 正确处理。但显然并非如此。

  2. 当我在 GitHub 上阅读时,我尝试通过添加以下行在 Keras 损失函数中手动设置自定义损失函数:importtensorflow.keras.losses
    tensorflow.keras.losses.build_vgg19_loss_network = build_vgg19_loss_network
    。没成功。

  3. 我在 GitHub 上读到,我可以通过 load_model Keras 函数使用自定义对象:但我只想使用 compile Keras 函数。不是load_model

我的最后一个问题

我只想对我的代码进行微小的更改,因为它工作得很好。因此,例如,我不想将 compile 替换为 load_model。有了这个限制,您能帮我让我的 CLI tflite_convert 与我的自定义损失函数配合使用吗?

最佳答案

由于您声称 TFLite 转换由于自定义损失函数而失败,因此您可以保存模型文件而不保留优化器详细信息。为此,请将 include_optimizer 参数设置为 False,如下所示:

model.save('model.h5', include_optimizer=False)

现在,如果模型中的所有图层都是可转换的,它们应该会转换为 TFLite 文件。

编辑:然后您可以像这样转换 h5 文件:

import tensorflow as tf

model = tf.keras.models.load_model('model.h5') # srgan.h5 for you
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

克服 TFLite 转换中不支持的运算符的通常做法是 documented here .

关于tensorflow - 在 {TF 2.0.0-beta1 上使用 tflite_convert 时为 "Unkown (custom) loss function"; Keras} 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576036/

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