class Net2:
@staticmethod
def build_cat_branch(inputs,category_size):
x = TimeDistributed(Dense(category_size))(inputs)
x = Activation('softmax', name="cat_output")(x)
return x
@staticmethod
def build_t_branch(inputs):
x = TimeDistributed(Dense(1, activation='relu', name="t_output"))(inputs)
return x
@staticmethod
def build_full_model(timestep_len,hidden_size,category_size,num_features,dropout,rec_drop):
inputs = Input(shape=(timestep_len,num_features),name="Input")
bn = BatchNormalization()(inputs)
lstm = LSTM(hidden_size, return_sequences=True, dropout=dropout, recurrent_dropout=rec_drop,name="LSTM")(bn)
bn2 = BatchNormalization()(lstm)
cat_branch = Net2.build_cat_branch(bn2,category_size)
t_branch = Net2.build_t_branch(bn2)
model = Model(inputs=inputs,outputs=[cat_branch,t_branch],name="Net2")
return model
当我尝试编译这个模型时,我得到:
ValueError:损失字典中的未知条目:“t_output”。只需要以下键:['cat_output', 'time_distributed_2']
(在我的模型摘要中,我命名为“t_output”的层改名为“time_distributed_2”)
所以,基本上,我的问题是 TD 包装器发生了什么导致 name 属性不是 build_t_branch 函数返回的对象的一部分?显然,“cat_output”名称存储正确,因为损失字典可以识别它,但是我在 TimeDistributed 包装器中的输出层没有保存用户定义的层名称。我知道我可以通过将所有层定义在一个没有“分支”函数的单个函数中来解决这个问题,但这不是这里的重点。这是 Keras 中的错误吗?如果没有上述修复,有什么办法可以解决这个问题?