首页 > 解决方案 > 将 3D 张量转换为 4D

问题描述

我正在使用 VGG16 模型,它需要一个 4D 张量作为输入。当我调用model.fit(xtrain, ytrain, ...)my时xtrain,是 3D 张量列表[size, size, features]- 所以在这种情况下:[224,224,3]

我想要的是 4D 张量[len(images), size, size, features]

我怎样才能修改我的代码才能到达那里?

我试过了tf.expand_dimstf.concant但没有用。

# Transforming my image to a 3D Tensor
image = tf.io.read_file(image)
image = tf.image.decode_jpeg(image, channels=3)
image = tf.image.resize(image, [IMG_SIZE, IMG_SIZE])
image = image / 255.0

错误消息后model.fit

检查输入时出错:预期 input_1 有 4 个维度,但得到了形状为 (224, 224, 3) 的数组

标签: tensorflow

解决方案


看起来您只阅读一张图片并通过它。如果是这种情况,您可以将尺寸 1 添加到图像的第一个轴。有很多方法可以做到这一点。

使用reshape

image = image.reshape(1, 224, 224, 3)

使用一些花哨的 numpy 切片符号来添加一个轴(个人喜欢):

image = image[None, ...]

numpy.expand_dims()按照 Abhijit 的回答中的说明使用。

我想你想读一堆图像。您的输入过程可能有问题?您可以将您的读取包装在一个循环中并读取多个文件吗?就像是:

images = []
for file in image_files:
    image = tf.io.read_file(file)
    # ...
    images.append(image)
images = np.asarray(images)

推荐阅读