tensorflow - 如何在 Call() 方法中保存带有位置参数的 keras 子类模型?
问题描述
import tensorflow as tf
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)
@tf.function
def call(self, enc_input, dec_input, training, mask1, mask2, mask3):
x = self.dense1(enc_input)
return self.dense2(x)
x = tf.random.normal((10,20))
model = MyModel()
y = model(x, x, False, None, None, None)
tf.keras.models.save_model(model, '/saved')
当我尝试保存模型时,即使我传递了所有参数,也会引发错误。
tf__call() missing 4 required positional arguments: 'training', 'mask1', 'mask2', and 'mask3'
如何保存整个模型而不仅仅是保存权重?
解决方案
我认为在更改之后执行此操作会起作用
#def call(self, enc_input, dec_input, training, mask1, mask2, mask3):
def call(self, enc_input, dec_input, training=False, mask1=None, mask2=None, mask3=None):
挖掘之后,我认为对函数参数进行了完整性检查,如果未指定位置参数,则 x 之后的参数将被视为 **kwargs 参数(我对此不太确定)。但是为了它,如果你不想设置参数的默认映射,你可以解压它们,这样每个参数都会放在它对应的位置,如下所示:
y = model(*[x,x,False,None,None,None])
推荐阅读
- r - Rstudio潜在的内存泄漏/后台活动?
- html - 如何使用 CSS 在锚标签上添加动画
- vim - Jedi Vim 可以与 gVim 一起工作,但不能与 Vim 一起工作
- c - 是否可以将格式说明符视为变量?
- python-docx - 使用 python docx 在 add_picture() 中是否有属性“适合页面”
- windows - Windows 中 Scala REPL 输出未显示颜色
- matlab - matlab parfor 在大型矩阵上的操作非常慢
- angular - 如何以嵌套方式呈现记录列表Angular异步管道
- debugging - 当它在 WinDbg 中的不同偏移量时,如何设置断点以定位此模拟位置?
- android - 我可以在首选项屏幕上的一个设置中创建多个复选框吗?