Python 基于通道将输入图像张量切片或拆分为变量
我试图将形状[batch_size,256256,3]输入图像的张量切片或拆分为三个单独的形状变量[batch_size,256256,1],其中每个变量正好包含输入图像的一个通道,即 R_通道=图像[-1256256,0] G_通道=图像[-1256256,1] B_通道=图像[-1256256,2] 我已针对上述问题尝试了以下代码:Python 基于通道将输入图像张量切片或拆分为变量,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我试图将形状[batch_size,256256,3]输入图像的张量切片或拆分为三个单独的形状变量[batch_size,256256,1],其中每个变量正好包含输入图像的一个通道,即 R_通道=图像[-1256256,0] G_通道=图像[-1256256,1] B_通道=图像[-1256256,2] 我已针对上述问题尝试了以下代码: imgs, label = iterator.get_next() channel_r=imgs[-1,:,:,0] channel_g=imgs[-1,:,
imgs, label = iterator.get_next()
channel_r=imgs[-1,:,:,0]
channel_g=imgs[-1,:,:,1]
channel_b=imgs[-1,:,:,2]
NN_network(imgs,channel_r,channel_g,channel_b)
...
def NN_network(imgs,c_r,c_g,c_b):
conv1=tf.layers.conv2d(imgs,n_filter,kernel_Size,...)
conv2=tf.layers.conv2d(c_r,n_filter,kernel_Size,...)
conv3=tf.layers.conv2d(c_g,n_filter,kernel_Size,...)
conv4=tf.layers.conv2d(c_b,n_filter,kernel_Size,...)
concat_layer=tf.concat(axis=3,values=[imgs,c_r,c_g,c_b])
在tensorflow中,但我得到以下错误:
InvalidArgumentError(回溯见上文):ConcatOp:维度
输入的数量应匹配:形状[0]=[16,12256256]与形状[1]=
[1,12256256][[节点LC_Nikon1/concat(定义于)=
ConcatV2[N=4,T=DT_浮点,Tidx=DT_INT32,
_device=“/job:localhost/replica:0/task:0/device:GPU:0”](/conv2d/biaadd,
/conv2d_1/BiasAdd、/conv2d_2/BiasAdd、/conv2d_3/BiasAdd、,
渐变/调整图像大小(带有“裁剪”或“垫块”1/裁剪到“边界”框/切片/渐变/凹角/轴)]]
[{{node
使用“裁剪”或“垫/垫”将“图像”调整到“边界”框/GreaterEqual\u 3/\u 83}
=\u Recvclient\u terminated=false,recv\u device=“/job:localhost/replica:0/task:0/device:CPU:0”,
send_device=“/job:localhost/replica:0/task:0/device:GPU:0”,
发送设备化身=1,
tensor_name=“edge_384_resize_image_,带有裁剪_或_pad/pad_to_bounding_box/greater equal_3”,
张量类型=DT\u BOOL,
_device=“/job:localhost/replica:0/task:0/device:CPU:0”]]
如何执行以下操作?此错误是什么原因?可运行代码:
import tensorflow as tf
import numpy as np
# imgs is supposed to be a tensor
# tf.random.normal available in TF 1.12
imgs = tf.random.normal((16, 256, 256, 3))
channel_r=imgs[:,:,:,0:1]
channel_g=imgs[:,:,:,1:2]
channel_b=imgs[:,:,:,2:3]
n_filter = 16
kernel_Size = 3
def NN_network(imgs,c_r,c_g,c_b):
conv1=tf.layers.conv2d(imgs,n_filter,kernel_Size)
conv2=tf.layers.conv2d(c_r,n_filter,kernel_Size)
conv3=tf.layers.conv2d(c_g,n_filter,kernel_Size)
conv4=tf.layers.conv2d(c_b,n_filter,kernel_Size)
concat_layer=tf.concat(axis=3,values=[imgs,c_r,c_g,c_b])
NN_network(imgs,channel_r,channel_g,channel_b)
您的错误消息是shape[0]
(即imgs
的形状)等于[16,12256256]
,但shape[1]
(即c\r
的形状)等于[1,12256256]
(它们的第0维不匹配)
这是因为您设置了channel\u r=imgs[-1,:,:,0]
,其第0个维度与imgs
的维度不匹配
我已经将channel\u r=imgs[-1,:,:,:,0]
更改为channel\u r=imgs[:,:,:,0:1]
,这样得到的channel\u r
将有4个维度,并且只与“imgsat 3rd dimension”不同