Передача `training = true` при использовании функционального API Keras в Tensorflow 2 - PullRequest
1 голос
/ 06 ноября 2019

При работе в графическом режиме в TF1, я считаю, что мне нужно было подключить training=True и training=False через feeddicts, когда я использовал API в функциональном стиле. Как правильно сделать это в TF2?

Я считаю, что это автоматически обрабатывается при использовании tf.keras.Sequential. Например, мне не нужно указывать training в следующем примере из документов [1]:

odel = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, 3, activation='relu',
                           kernel_regularizer=tf.keras.regularizers.l2(0.02),
                           input_shape=(28, 28, 1)),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Model is the full model w/o custom layers
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(train_data, epochs=NUM_EPOCHS)
loss, acc = model.evaluate(test_data)
print("Loss {:0.4f}, Accuracy {:0.4f}".format(loss, acc))

Могу ли я также предположить, что keras автоматически обрабатывает это при обучении с функциональным API? Вот та же модель, переписанная с использованием функции api:

inputs = tf.keras.Input(shape=((28,28,1)), name="input_image")
hid = tf.keras.layers.Conv2D(32, 3, activation='relu',
                           kernel_regularizer=tf.keras.regularizers.l2(0.02),
                           input_shape=(28, 28, 1))(inputs)
hid = tf.keras.layers.MaxPooling2D()(hid)
hid = tf.keras.layers.Flatten()(hid)
hid = tf.keras.layers.Dropout(0.1)(hid)
hid = tf.keras.layers.Dense(64, activation='relu')(hid)
hid = tf.keras.layers.BatchNormalization()(hid)
outputs = tf.keras.layers.Dense(10, activation='softmax')(hid)
model_fn = tf.keras.Model(inputs=inputs, outputs=outputs)

# Model is the full model w/o custom layers
model_fn.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model_fn.fit(train_data, epochs=NUM_EPOCHS)
loss, acc = model_fn.evaluate(test_data)
print("Loss {:0.4f}, Accuracy {:0.4f}".format(loss, acc))

Я не уверен, что hid = tf.keras.layers.BatchNormalization()(hid) должно быть hid = tf.keras.layers.BatchNormalization()(hid, training)?

Для этих моделей можно найти колабздесь [2].

[1] https://www.tensorflow.org/guide/migrate [2] https://gist.github.com/justincosentino/d36d66cddb1d606f72818c63d90d5147

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...