我在Keras建立了一个LSTM模型,用于多标签分类,但是有数千种可能的输出标签,每个标签都有自己的S形预测层和独特的注意力MLP层。是否可以训练和保存这么大的模型?我得到以下h5py RuntimeError:无法创建属性(对象标头消息太大)。
答案 0 :(得分:1)
您可能已经了解HDF5的标头限制。查看here了解更多信息。
因此,我遇到了同样的问题,并用一点技巧解决了它。在保存之前,将图层名称更改为一些小字符串。我这样做是这样的:
for i, m in enumerate(model.layers):
m.name = 'n' + str(i)
而且有效(不要让'n'引起您的困惑。我只希望图层名称以字符而不是数字开头)。请注意,层名称应唯一,而str(i)可以解决该问题。如果稍后加载模型后需要图层名称,则可以为其创建字典并将字典保存在文本文件中。加载模型后,从文本文件中读取字典并将其用于将当前图层名称映射到原始名称。 例如,创建像这样的字典:
dic = {}
for i, m in enumerate(model.layers):
dic['n' + str(i)] = m.name
m.name = 'n' + str(i)
并在以后像这样使用它:
for m in model.layers:
m.name = dic[m.name]