Массив как вход для тензорного потока

Я пытаюсь использовать массив в качестве входных данных для модели тензорного потока. Вход для обучения xs Результат обучения ys Вход для теста zs Когда я тренирую модель, все работает нормально, но если я использую прогнозирование появляется эта ошибка:

ValueError                                Traceback (most recent call last)
<ipython-input-1-08c8b5d5ab9e> in <module>()
     26 model.fit(xs,ys, epochs=500)
     27 
---> 28 print(model.predict(zs))
     29 #print(str(model.get_weights()))
     30 #np.array([np.array(x) for x in xs])

10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    971           except Exception as e:  # pylint:disable=broad-except
    972             if hasattr(e, "ag_error_metadata"):
--> 973               raise e.ag_error_metadata.to_exception(e)
    974             else:
    975               raise

ValueError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1462 predict_function  *
        return step_function(self, iterator)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1452 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1445 run_step  **
        outputs = model.predict_step(data)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1418 predict_step
        return self(x, training=False)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:976 __call__
        self.name)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py:216 assert_input_compatibility
        ' but received input with shape ' + str(shape))

    ValueError: Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 3 but received input with shape [None, 1]

Это мой код:

import numpy as np
from tensorflow import keras

model = tf.keras.Sequential([keras.layers.Dense(units=3, input_shape=[3])])
model.add(keras.layers.Dense(units=20))
model.add(keras.layers.Dense(units=40))
model.add(keras.layers.Dense(units=100))
model.add(keras.layers.Dense(units=20))
model.add(keras.layers.Dense(units=1))

#model.set_weights()
model.compile(optimizer='sgd', loss='mean_squared_error')

xs = tf.constant([[15,0,0],
               [17,0,0],
               [19,1,0],
               [21,1,20],
               [23,1,20],
               [1,1,0],
               [3,1,0],
               [5,1,0]])
ys = tf.constant([0,0,0,0,0,1,1,1])
zs = tf.constant([15,0,0])
print(model.output_shape)
model.fit(xs,ys, epochs=500)

print(model.predict(zs))

Как я могу правильно использовать свою модель? Я слышал об оценке, но это просто возвращает потерю.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
401
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ввод Keras ожидает пакетное измерение. В вашей переменной zs его нет.

Вы можете использовать zs = tf.expand_dims(zs,axis=0) для добавления пакетного измерения или использовать вложенный список при создании zs.

zs = tf.constant([[15,0,0]])

Вы можете проверить форму, ожидаемую моделью, просмотрев ее входные данные:

>>> model.input.shape
TensorShape([None, 3])

Здесь None означает, что первое измерение может быть любым числом > 0.

Если вы проверите свою переменную zs, вы увидите, что форма не совпадает.

>>> zs = tf.constant([15,0,0])
>>> zs.shape
TensorShape([3])

Но если мы используем tf.expand_dims или используем вложенный список при построении zs, форма будет совместима.

>>> zs_exp = tf.expand_dims(zs,axis=0)
>>> zs_exp.shape
TensorShape([1, 3])
>>> zs_nested_list = tf.constant([[15,0,0]])
>>> zs_nested_list.shape
TensorShape([1, 3])

Измените свой ввод на что-то вроде этого

zs = tf.constant([[15,0,0]])

Форма ввода прогноза должна быть аналогична вводу обучения.

Другие вопросы по теме