Тензор потока керас не может удержать отсев во время фазы прогнозирования (не работает фаза обучения) - PullRequest
1 голос
/ 22 октября 2019

В моей нейронной сети я пытаюсь поддерживать активный отсев во время фазы прогнозирования. Я пытаюсь сделать это с помощью tenorflow.keras.backend.set_learning_phase (1) в tenorflow 2.0 RC.

Проблема возникает, когда я вызываю model.compile, который, кажется, отключает выпадение во время фазы прогнозирования.

Следующий код показывает, как я устанавливаю фазу обучения. Перед составлением модели прогнозы являются полуслучайными, как и ожидалось. После того, как модель скомпилирована, предсказания больше не являются полуслучайными, даже если фаза обучения все еще составляет 1

import tensorflow as tf
from tensorflow import keras
import tensorflow.keras.backend as K
from tensorflow.keras import layers

# load boston housing data
from tensorflow.keras.datasets import boston_housing
(x_train, y_train), (x_test, y_test) = boston_housing.load_data()

# define model
K.clear_session()
K.set_learning_phase(1)
x = keras.Input(shape=(13,))
y = layers.Dense(10, activation='relu')(x)
y = layers.Dropout(0.5)(y)
y = layers.Dense(1)(y)

model = keras.Model(inputs=x,outputs=y)

# these results will have randomness
model.predict(x_test[0:1])
model.predict(x_test[0:1])
model.predict(x_test[0:1])

model.compile(optimizer="adam", loss='mse')


# now that model is compiled randomness is lost
model.predict(x_test[0:1])
model.predict(x_test[0:1])
model.predict(x_test[0:1])

print(K.learning_phase()) # == 1

. Это работало для меня в прошлых версиях тензор потока

1 Ответ

0 голосов
/ 22 октября 2019

Слой Dropout принимает параметр training, который определяет, находится ли он в режиме обучения. Глядя на код на github, в отсутствие параметра training он должен использовать фазу обучения, которая была задана явно.

Однако, возможно, это поведение как-то изменилось. В этом потоке github предлагает явно установить параметр обучения, например, как один комментатор wrote:

import tensorflow.keras

inputs = tensorflow.keras.Input(shape=(10,))
x = tensorflow.keras.layers.Dense(3)(inputs)
outputs = tensorflow.keras.layers.Dropout(0.5)(x, training=True)

model = tensorflow.keras.Model(inputs, outputs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...