Преобразование набора данных Tensorflow в 2 массива, содержащих изображения и метки - PullRequest
1 голос
/ 22 января 2020

Я использую TensorFlow 2.0, и у меня есть пакетный набор данных, который содержит 968 изображений и метку (массив из 4 элементов) для каждого:

dataSetSize = allDataSet.reduce(0, lambda x, _: x + 1).numpy()
allDataSet = allDataSet.shuffle(dataSetSize)
allDataSet = allDataSet.map(processPath, num_parallel_calls=tf.data.experimental.AUTOTUNE)
allDataSet = allDataSet.batch(10)
predictions = loadedModel.predict(allDataSet)

onlyImages = # how to create this?
onlyLabels = # how to create this?

# the 'map' function in my dataset returns a batch of images and their corresponding labels
for idx, (imageBatch, labelBatch) in enumerate(allDataSet) :
    # how to concatenate batches together?
    onlyImages = # ?
    onlyLabels = # ?

Мне нужно разделить этот набор данных на два numpy массивы. Первый массив должен содержать только 968 изображений (форма: (968, 299, 299, 3)), а второй - метки 968 (форма: (968, 4)). Как я могу это сделать?

Я проверил аналогичный вопрос здесь , но эти примеры, похоже, используют Tensorflow 1.x и состоят из другого типа ввода?

Размер набора данных и типов:

dataset size:  968
<DatasetV1Adapter shapes: ((None, 299, 299, 3), (None, 4)), types: (tf.float32, tf.float32)

1 Ответ

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

Если я хорошо понимаю ваш вопрос, то теперь вам нужно выполнить конкатенацию к массиву numpy во время итерации по вашему набору данных. Обратите внимание, что во время итерации, если вы примените операцию .numpy(), вы автоматически преобразуете из tf.tensor в np.array.

Поэтому вам доступны следующие опции:

  1. Согласно документации,

      a = np.array([[1, 2], [3, 4]])
      b = np.array([[5, 6]])
      np.concatenate((a, b), axis=0)
    

    Вывод:

    array([[1, 2],
           [3, 4],
           [5, 6]])
    

    Итак, в вашем коде определите исходный пустой массив numpy, к которому вы объединяете, на axis=0 (с imageBatch и labelBatch).

  2. Или вы можете использовать np.vstack (np.concatenate использует np.vstack под капотом), что дает тот же результат.
...