【问题标题】:How to use keras model inside other model in TPU如何在 TPU 的其他模型中使用 keras 模型
【发布时间】:2022-04-24 20:21:11
【问题描述】:

我正在尝试将 keras 模型转换为 google colab 中的 tpu 模型,但是这个模型里面有另一个模型。

看一下代码: https://colab.research.google.com/drive/1EmIrheKnrNYNNHPp0J7EBjw2WjsPXFVJ

这是 google tpu 文档中的示例之一的修改版本: https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb

如果 sub_model 被转换并直接使用它可以工作,但如果子模型在另一个模型中它就不起作用。我需要子模型类型的网络,因为我正在尝试训练一个内部有 2 个网络(gan=generator+discriminator)的 GAN 网络,所以如果这个测试有效,它可能也适用于 gan。

我已经尝试了几件事:

  • 在不转换子模型的情况下将模型转换为 tpu,这样在开始训练时会提示与子模型的输入相关的错误。
  • 将模型和子模型都转换为tpu,这样在转换“父”模型时会提示错误,异常只在“层”末尾说。
  • 仅将子模型转换为tpu,在这种情况下不会提示错误,但tpu不会加速训练,并且非常慢,就像根本没有转换为tpu一样。
  • 无论是否使用固定批量大小,两者的结果相同,模型都不起作用。

有什么想法吗?非常感谢。

【问题讨论】:

标签: python keras deep-learning generative-adversarial-network tpu


【解决方案1】:

在 tpu 上分片只使用子模型。然后放一些简单的东西而不是子模型,并在 TPU 中使用模型。如果这不起作用,请创建一些非常简单的东西,其中包括与您确定正在工作的模型相似的结构,然后逐步添加东西以收敛您想要在 TPU 中使用的复杂模型。

我正在为这些事情苦苦挣扎。我一开始使用 MNIST 所做的是训练模型并获得外部系数,我自己重写 relu 密集 dropout 和 NN 矩阵,然后使用 numpy、cupy 和 pyopencl 运行模型,然后用我自己的原始 cuda C 替换函数和opencl 函数使我可以在某些东西不起作用时更深入和更简单地找到问题所在。最后我写了我的遗传选择性训练算法,学到了很多。

最重要的是,它让我有机会尝试一些疯狂的想法来训练、建模、操作和理解 NN 系数。

在我看来问题是 TF - Keras 等太高级了。 Optimizers - Solvers ,有太多的未知数。甚至神经网络也不受控制。 GAN 是有问题的,虽然训练它不会每次都收敛,大部分时间都需要几天的时间来训练。即使你训练。你不知道它是如何收敛的。大多数技巧 - 保护您免受梯度消失的技术都没有数学支持,但它们的效果非常惊人。 (?!?)

**一步一步地变得更简单、更深入、更复杂。尽可能多地进行练习**这将花费一些时间和精力,但我认为你会从中受益匪浅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 2018-07-24
    • 2022-01-25
    • 2019-05-25
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多