InvalidArgumentError: Tensor must be 4-D with last dim 1, 3, or 4, not [shape]

InvalidArgumentError: Tensor must be 4-D with last dim 1, 3, or 4, not [shape]问题:

在我的程序里有这个的一个函数:
tf.summary.image()

(一)具体讲一下tf.summary.image()函数

tf.summary.image(
 	name,
 	tensor,
	max_outputs=3,
 	collections=None,
	family=None
)

定义于:tensorflow/python/summary/summary.py

输出Summary带有图像的协议缓冲区。

构建的图像的Tensor必须是4-D形状[batch_size, height, width, channels], 其中channels可以是:

1: tensor被解析成灰度图像。 #1通道

3:tensor被解析成RGB图像。 #3通道

4:tensor被解析成RGBA图像。 #4通道

图像具有与输入张量相同的通道数。对于浮点输入,将值一次标准化为一个在[0, 255], uint8值不变。op使用两种不同的规范化算法:

如果输入值都是正数,则重新调整它们,因此最大值为255。

如果任何输入值为负,则移动值,使输入值0.0为127.然后重新调整它们,使得最小值为0,或者最大值为255。

参数:

name:生成的节点的名称。也将作为TensorBoard中的系列名称。

tensor:uint8或者float32型的4-D Tensor[batch_size, height, width, channels],其中channels为1, 3 或者4。

max_outpus:要生成图像的最大批处理元素数。

collections:ops.GraphKeys的可选列表。要添加摘要的集合。默认为[_ops.GraphKeys.SUMMARIES]。

family:可选的; 如果提供,则用作摘要标记名称的前缀,该名称控制用于在Tensorboard上显示的选项卡名称。

返回值:

Tensor:string类型的序列化Summary协议缓冲区。

————————————————
以上原文链接:https://blog.csdn.net/heiheiya/article/details/80943534,本文做了些改动!

(2)问题解决

在问题解决之前,先了解一下tf.expand_dims()函数。
在TensorFlow中,想要维度增加一维,可以使用tf.expand_dims(input, dim, name=None)函数。当然,我们常用tf.reshape(input, shape=[])也可以达到相同效果,但是有些时候在构建图的过程中,placeholder没有被feed具体的值,这时就会包下面的错误:TypeError: Expected binary or unicode string, got 1

在这种情况下,我们就可以考虑使用expand_dims来将维度加1。比如我自己代码中遇到的情况,在对图像维度降到二维做特定操作后,要还原成四维[batch, height, width, channels],前后各增加一维。如果用reshape,则因为上述原因报错

官网示例:

# 't' is a tensor of shape [2]
shape(expand_dims(t, 0)) ==> [1, 2]
shape(expand_dims(t, 1)) ==> [2, 1]
shape(expand_dims(t, -1)) ==> [2, 1]

# 't2' is a tensor of shape [2, 3, 5]
shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5]
shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]
shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]

我的问题代码:

tf.summary.image("image", image)       #image的shape是[24,24.3],因此会产生如标题的错误。

问题解决:

image=tf.expand_dims(image,0)       #在image的[24,24.3]的索引为0位置的位置上添加一个张量。
tf.summary.image("image", image)

问题完美解决!!!

上一篇:Tensorflow---基于TensorFlow实现手写数字的模型训练预测


下一篇:Summary of Segmentation Networks