Путаница в отношении керас Модель: __call__ против методов вызова и предсказания - PullRequest
2 голосов
/ 24 марта 2020

Я понял, что не совсем понимаю разницу между вызовом метода __call__, call или predict модели Кераса.

Например, у нас есть обученный модель керас. После вызова кода:

# After training.
y_pred_1 = model(X_new)
y_pred_2 = model.call(X_new)
y_pred_3 = model.predict(X_new)

я ожидал, что y_pred_1, y_pred_2 и y_pred_3 все одинаковые. Но оказалось, что они не одинаковы.

Не могли бы вы объяснить мне разницу?

1 Ответ

0 голосов
/ 26 марта 2020

Плохо, это была ошибка в моем коде.

Оказалось, что между этими тремя методами нет существенной разницы.

Единственное отличие состоит в том, что call принимает только тензоры, в то время как другие два метода также принимают массивы NumPy.

Вот игрушечный код, показывающий, что три метода одинаковы:

import numpy as np
import tensorflow as tf


model = tf.keras.Sequential(
    [
        tf.keras.layers.InputLayer(input_shape=(2, )),
        tf.keras.layers.Dense(2),
    ]
)
model.compile(loss='mse')

W = model.trainable_variables[0]
W.assign(np.array([[1.0, 0.0], [0.0, 1.0]]).T)

input = np.array([[1.0, 2.0], [3.0, 4.0], ], dtype=np.float32)

print("__call__:")
print(model(input))

print("Call:")
print(model.call(tf.convert_to_tensor(input)))

print("Predict:")
print(model.predict(input))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...