Tensorflow &引用;未知(自定义)损失函数“;在{tf2.0.0-beta1;Keras}模型上使用tflite_convert时 总结
我的问题由以下部分组成:Tensorflow &引用;未知(自定义)损失函数“;在{tf2.0.0-beta1;Keras}模型上使用tflite_convert时 总结,tensorflow,machine-learning,keras,deep-learning,Tensorflow,Machine Learning,Keras,Deep Learning,我的问题由以下部分组成: 我展示我的项目、工作环境和工作流程的背景 细节问题 我的代码的相关部分 我试图解决我的问题的解决方案 问题提醒 上下文 我已经编写了一个Python Keras实现,它是原始超分辨率GAN的降级版本。现在我想用谷歌Firebase机器学习工具包测试它,把它放在谷歌服务器上。这就是为什么我必须将Keras程序转换为TensorFlow Lite程序 环境和工作流(有问题) 我正在谷歌Colab工作环境上培训我的程序:在那里,我安装了TF2.0.0-beta1(这个选择
- 我展示我的项目、工作环境和工作流程的背景
- 细节问题
- 我的代码的相关部分
- 我试图解决我的问题的解决方案
- 问题提醒
TF2.0.0-beta1
(这个选择的动机是这个不正确的答案:)
工作流程(和问题):
来自tensorflow.keras.optimizers导入Adam
,以及来自tensorflow.keras.layers导入Conv2D、批次标准化
TFLite\u convert--output\u file=srgan.TFLite--keras\u model\u file=srgan.h5
:这里出现了问题build_vgg19_loss_network
是我已经实现的自定义loss函数,必须由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\u model.compile(优化器=优化器,loss=build\u vgg19\u loss\u网络)
为了解决这个问题我试着做了什么
tflite\u convert
CLI正确处理。但显然不是import tensorflow.Keras.loss
tensorflow.keras.loss.build_vgg19_loss_network=build_vgg19_loss_network
。它不起作用load\u model
Keras函数的自定义对象:但我只想使用compile
Keras函数。不加载\u模型
我只想对我的代码做一些小的修改,因为它工作得很好。例如,我不想将
compile
替换为load\u model
。有了这个限制,您能否帮助我使我的CLItflite\u convert
与我的自定义丢失功能一起工作?既然您声称tflite转换由于自定义丢失功能而失败,您可以保存模型文件而不保留优化器详细信息。为此,请将include\u 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转换中不支持的运算符的通常做法是。我也有同样的错误。我建议将损失更改为“mse”,因为您已经有一个经过良好训练的模型,并且不需要使用.tflite文件进行训练。为什么不将pb文件中的权重加载到网络中,然后使用我在回答中显示的API以h5或saved_模型格式保存模型。然后,您可以使用这个Python API本身将h5或保存的_模型格式转换为TFLite:您能告诉我错误的名称吗?我想这是一个警告。能否在目录中检查是否创建了tflite文件?如果没有,请将您的h5文件上传到某个地方并共享链接,以便检查。我已编辑代码以转换h5文件。您的h5文件正在使用上述代码进行转换。如果您需要,我可以为您上载tflite文件。这是下载该文件的链接:我无法在CPU中转换它。我使用了Google Colab中提供的免费GPU。只需添加“优化器”和“编译”对于使用模型来说根本不是必需的。优化器的唯一作用是“培训”。如果模型已经被训练,而你不再训练它,你就不需要优化器或损失。这并不能真正回答问题。如果您有不同的问题,可以单击以提问。一旦你有足够的时间,你也可以吸引更多的注意力-