3
$\begingroup$
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

When I try to compile this model I get:

ValueError: Unknown entry in loss dictionary: "t_output". Only expected the following keys: ['cat_output', 'time_distributed_2']

(in my model summary, my layer that I name "t_output" has the name "time_distributed_2" instead)

So, basically, my question is what's going on with the TD wrapper that causes the name attribute to not be part of the object returned by the build_t_branch function? Clearly, the "cat_output" name is stored correctly, as the loss dictionary recognizes it, but the output layer I have inside a TimeDistributed wrapper is not saving the user defined layer-name. I know I can get around this by just having all layers defined in a single function without the "branch" functions, but that is besides the point here. Is this a bug in Keras? Any way to get around this without the above mentioned fix?

$\endgroup$

1 Answer 1

0
$\begingroup$

The reason is you should name the TD instead of Dense. Be cautious with the bracket. Change it to:

x = TimeDistributed(Dense(1, activation='relu'), name="t_output")(inputs)

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.