无法将张量添加到批处理中:元素数量不匹配

时间:2019-03-27 10:52:20

标签: keras deep-learning iterator batch-processing

我在训练由两个卷积层组成的神经元网络时遇到问题。我有一堆图像,可以在“生成迭代器”函数中对其进行规范化和调整大小以形成(28,28,3)。

然后正常运行训练阶段,直到遇到此错误为止:

“ InvalidArgumentError:无法将张量添加到批处理中:元素数量不匹配。形状为:[张量]:[28,28,4],[批处理]:[28,28,3]      [[{{node IteratorGetNext_31}}]]

我首先尝试加载一些图像并使用opencv调整它们的大小,然后它起作用了。但是,考虑到我的数据集的大小,我需要使用keras util提供的迭代器和数据集对象在我拥有的所有图像上训练我的网络。

这是迭代器的代码:

def make_iterator(filenames, labels, batch_size):
    dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))

    def parse(filename, label):
        image = tf.read_file(filename)
        image = tf.image.decode_jpeg(image)
        image = tf.cast(image, tf.float32)
        image = tf.image.resize(image, (28,28))
        image = tf.reshape(image,  [28,28,3])
        image = image / 256
        return {'image': image, 'label': label}

    dataset = dataset.apply(tf.data.experimental.map_and_batch(
        map_func=parse, batch_size=batch_size, num_parallel_batches=8))

        return dataset.make_one_shot_iterator()

以下是我的Convnet的详细信息:

model = keras.Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 3)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

最后是拟合阶段的参数:

history = model.fit(images
                    , labels
                    , epochs=200
                    , steps_per_epoch= len(train_image_labels) // batch_size
                   )

预先感谢:)

0 个答案:

没有答案