Из нашего обсуждения мы можем уточнить некоторые вещи.
Во-первых, не очень уверен в ошибке при прямой подаче его в виде кортежа.Может потребоваться дополнительная информация о данных для него.
Что касается проверки данных с помощью tf, когда мы используем from_tensor_slices , "мы создаем набор данных, элементы которого являются кусочками заданных тензоров",Что касается этого примера, то вводимые нами данные представляют собой кортеж с соответствующими формами (221,347) и (221,1).Что делает from_tensor_slices, так это то, что он разрезает соответствующие массивы numpy вдоль 0-го измерения (здесь размер 221).Таким образом, метод создаст набор данных, где каждый элемент представляет собой кортеж формы (347,) и (1,) соответственно.В наборе данных будет 221 таких элементов.
Если мы используем метод from_tensors с другой стороны, он создает набор данных с одним элементом, который состоит из заданных тензоров в качестве входных данных.,Таким образом, это равносильно прямой подаче пустых данных, как это делается через объект набора данных.
Вот краткий пример того, как это работает для гораздо меньшего измерения:
import numpy as np
import tensorflow as tf
np.random.seed(42)
example_train = np.random.randn(4, 4)
example_test = np.random.randn(4, 1)
print("Example Train:", example_train)
print("Example Test:", example_test)
dataset1 = tf.data.Dataset.from_tensor_slices((example_train, example_test))
dataset2 = tf.data.Dataset.from_tensors((example_train, example_test))
it1 = dataset1.make_one_shot_iterator().get_next()
it2 = dataset2.make_one_shot_iterator().get_next()
with tf.Session() as sess:
for i in range(4):
print("Element {} of dataset1: {}".format(i,sess.run([it1])))
print ("Element 0 of dataset2: ", sess.run([it2]))
Результат:
Example Train: [[ 0.49671415 -0.1382643 0.64768854 1.52302986]
[-0.23415337 -0.23413696 1.57921282 0.76743473]
[-0.46947439 0.54256004 -0.46341769 -0.46572975]
[ 0.24196227 -1.91328024 -1.72491783 -0.56228753]]
Example Test: [[-1.01283112]
[ 0.31424733]
[-0.90802408]
[-1.4123037 ]]
Element 0 of dataset1: [(array([ 0.49671415, -0.1382643 , 0.64768854, 1.52302986]), array([-1.01283112]))]
Element 1 of dataset1: [(array([-0.23415337, -0.23413696, 1.57921282, 0.76743473]), array([0.31424733]))]
Element 2 of dataset1: [(array([-0.46947439, 0.54256004, -0.46341769, -0.46572975]), array([-0.90802408]))]
Element 3 of dataset1: [(array([ 0.24196227, -1.91328024, -1.72491783, -0.56228753]), array([-1.4123037]))]
Element 0 of dataset2: [(array([[ 0.49671415, -0.1382643 , 0.64768854, 1.52302986],
[-0.23415337, -0.23413696, 1.57921282, 0.76743473],
[-0.46947439, 0.54256004, -0.46341769, -0.46572975],
[ 0.24196227, -1.91328024, -1.72491783, -0.56228753]]), array([[-1.01283112],
[ 0.31424733],
[-0.90802408],
[-1.4123037 ]]))]
Что касается моих комментариев о пакете метод, установив batch_size равным 221 для объединения вещей, если мы изменим код набора данных на что-то вроде этого и изменим нашу печать на что-то вроде этого, например:
dataset1 = tf.data.Dataset.from_tensor_slices((example_train, example_test)).batch(4)
with tf.Session() as sess:
print ("Element 0 of dataset1: ", sess.run([it1]))
Наш результат:
Element 0 of dataset1: [(array([[ 0.49671415, -0.1382643 , 0.64768854, 1.52302986],
[-0.23415337, -0.23413696, 1.57921282, 0.76743473],
[-0.46947439, 0.54256004, -0.46341769, -0.46572975],
[ 0.24196227, -1.91328024, -1.72491783, -0.56228753]]), array([[-1.01283112],
[ 0.31424733],
[-0.90802408],
[-1.4123037 ]]))]
, который вы видите, аналогичен использованию from_tensors.