tensorflow - 将 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_dims
,tf.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) 的数组
解决方案
看起来您只阅读一张图片并通过它。如果是这种情况,您可以将尺寸 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)
推荐阅读
- math - 如何在参数均衡器中绘制频率分离
- html - 使用 css 将悬停应用于具有相同类名的所有元素
- actions-on-google - 您在哪里可以在未部署但仍处于开发阶段的 google-home 应用程序中找到您的操作
- android - Google Admob 广告最近停止展示
- android - 通过 Tensorflow 进行的图像分类给出了完全相同的预测
- python - 熊猫数据框-> Float64 或 npy?
- java - 无法在 Junit 中设置正确的期望值。面对 mockit.internal.UnexpectedInvocation
- sql-server - SQL Server Linux - 使用 OPENROWSETsql 时未注册 OLE DB
- java - 使用 moka7 从 plc 读取字符串
- android - 片段中的 onBackPressed()