Как назначить имена для Ouputs в подклассовой модели Keras? - PullRequest
0 голосов
/ 29 января 2020

Я хочу назвать выходы подкласса TensorFlow Keras Model, чтобы я мог передавать им цели в fit(), например, self.model.fit(np_inputs, {'q_values': np_targets}, verbose=0)

Модель выглядит следующим образом:

class MyModel(tf.keras.models.Model):
    def __init__(self, name):
        super(MyModel, self).__init__()
        self.input_layer = tf.keras.Input(shape=(BOARD_SIZE * 3,))
        self.d1 = tf.keras.layers.Dense(BOARD_SIZE * 3 * 9, activation='relu')
        self.d2 = tf.keras.layers.Dense(BOARD_SIZE * 3 * 100, activation='relu')
        self.d3 = tf.keras.layers.Dense(BOARD_SIZE * 3 * 9, activation='relu')
        self.q_values_l = tf.keras.layers.Dense(BOARD_SIZE, activation=None, name='q_values')
        self.probabilities_l = tf.keras.layers.Softmax(name='probabilities')

    @tf.function
    def call(self, input_data):
        x = self.d1(input_data)
        x = self.d2(x)
        x = self.d3(x)
        q = self.q_values_l(x)
        p = self.probabilities_l(q)
        return p, q

Я наивно предполагал, что имена соответствующих слоев также будут назначены выходам, но, похоже, это не так.

У меня есть цели только к одному из выходов, поэтому необходимо точно указать, для каких выходных данных используются цели при вызове fit().

. При функциональном использовании Keras это работает хорошо, но я не могу воспроизвести его в подходе подкласса. Я не могу использовать функциональный способ Keras в моем случае по несвязанным причинам.

1 Ответ

1 голос
/ 29 января 2020

Почему бы просто не пройти пустышку?

model.fit(np_inputs, [np.zeros((len(np_inputs),)), np_targets], ...)

Может быть, даже None можно передать вместо np.zeros.

Вы можете скомпилировать модель точно так же:

model.compile(loss=[p_loss, q_loss], ...)
...