Понимание кода с официальной страницы тензорного потока - PullRequest
0 голосов
/ 23 января 2020

Я запутался в коде на этой странице .

question1)

Блок кода ниже показывает выходные данные с этой страницы. Перед этим шагом я не вижу кода, который обучает наши данные с использованием функции model.fit. Так что код ниже? Показывают ли они прогнозы с использованием случайных весов?

model.predict(train_features[:10])

array([[0.6296253 ],
       [0.82509124],
       [0.75135857],
       [0.73724824],
       [0.82174015],
       [0.33519754],
       [0.6719973 ],
       [0.30910844],
       [0.6378555 ],
       [0.8381703 ]], dtype=float32)

model = make_model(output_bias = initial_bias)
model.predict(train_features[:10])

array([[0.00124893],
       [0.00185736],
       [0.00164955],
       [0.00123761],
       [0.00137692],
       [0.00182851],
       [0.00170887],
       [0.00239349],
       [0.0024704 ],
       [0.00517672]], dtype=float32)


results = model.evaluate(train_features, train_labels, batch_size=BATCH_SIZE, verbose=0)
print("Loss: {:0.4f}".format(results[0]))

Loss: 0.0157

question2)

Продолжая в коде, который написан ниже. Что такое initial_weights? это случайные значения?

initial_weights = os.path.join(tempfile.mkdtemp(),'initial_weights')
model.save_weights(initial_weights)

question3)

Тогда они говорят, что

Before moving on, confirm quick that the careful bias initialization actually helped.Train the model for 20 epochs, with and without this careful initialization, and compare the losses:

, но я не уверен, как они назначают начальный уклон. Я понимаю, что мы присваиваем 0 смещение для объекта zero_bias_history. Но как нам назначить смещение для careful_bias_history? разве он не должен иметь смещение, равное initial_bias. Как careful_bias_history получить значение смещения? я чувствовал, что careful_bias_history должно быть создано из модели, созданной с использованием model = make_model(output_bias = initial_bias)

### Confirm that the bias fix helps

Before moving on, confirm quick that the careful bias initialization actually helped.

Train the model for 20 epochs, with and without this careful initialization, and compare the losses: 

model = make_model()
model.load_weights(initial_weights)

model.layers[-1].bias.assign([0.0])
zero_bias_history = model.fit(
    train_features,
    train_labels,
    batch_size=BATCH_SIZE,
    epochs=20,
    validation_data=(val_features, val_labels), 
    verbose=0)

print (type(model))
#model.load_weights()

model = make_model()
model.load_weights(initial_weights)
careful_bias_history = model.fit(
    train_features,
    train_labels,
    batch_size=BATCH_SIZE,
    epochs=20,
    validation_data=(val_features, val_labels), 
    verbose=0)

1 Ответ

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

Ответ 1: Да, эти прогнозы основаны на модели после компиляции, но до ее обучения.

Ответ 2: Да, это случайные веса, например, в плотном слое они инициализируются с использованием glorot_uniform. tf.keras.layers.Dense

Ответ 3: Модель, которую мы сохранили выше, имела смещение, инициализированное с помощью np.log([pos/neg]), упомянуто здесь .

Итак, в zero_bias_history они инициализировали смещение нулями, используя model.layers[-1].bias.assign([0.0]), а в careful_bias_history они просто загрузили сохраненную модель, которая уже имела инициализированное смещение.

...