Python 基于通道将输入图像张量切片或拆分为变量

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,:,

我试图将形状[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,:,:,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”不同