Форма тензора inputs = tf.keras.layers.Input(1)
равна (None, 1)
(пробег inputs.get_shape().as_list()
). None
означает любой размер, который определяется динамически (размер партии). 1
- это форма вашей точки данных. Например, это тензор формы (3, 1)
:
[[1], [2], [1]]
Это тензор формы (3,)
[1, 2, 1]
Если определить тензор формы (None, 1)
Вы должны подать данные той же формы.
[[0]]
имеет правильную форму (1, 1)
и не выдаст ошибку или предупреждение, если вы передадите его как numpy массив ожидаемого типа данных:
import tensorflow as tf
import numpy as np
input_layer = tf.keras.layers.Input(1)
inner_layer = tf.keras.layers.Dense(4, activation='relu')(input_layer)
output_layer = tf.keras.layers.Dense(1, activation='linear')(inner_layer)
model = tf.keras.models.Model(input_layer, output_layer)
optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)
model.compile(optimizer=optimizer, loss='mse')
print(model(np.array([[0.]], dtype=np.float32)).numpy()) # [[0.]]
print(model.predict(np.array([[0.], [1]], dtype=np.float32))) # [[0. ]
# [0.08964952]]
np.reshape()
работает, потому что он автоматически преобразует ваш список в numpy массив. Для получения дополнительной информации о np.reshape
см. Официальную документацию .
. model.predict()
также ожидает такую же форму, как и model.__call__()
, но может выполнять автоматическое изменение формы c (расширение размера на слева, т.е. [1] -- > [[1]]
).