Numpy tensorflow多层切片不整形

Numpy tensorflow多层切片不整形,numpy,tensorflow,deep-learning,Numpy,Tensorflow,Deep Learning,我有3D(64,64,64)形状(椅子),当我使用tf操作将其重塑为(8,32,32),然后执行我的操作深度学习操作,然后使用tf重塑将其返回到(64,64,64)形状看起来非常糟糕,实际上没有形状,只有奇怪的外观未知形状(100%看起来不像椅子) 但是,如果我使用我构建的函数来划分32乘32,并将它们堆叠为(8,32,32,32),我将其用作DL模型的输入。我使用的输出(8,32,32,32)也使用组合函数,我通过反转切片函数来重新组合,得到了好看的形状 问题是函数切片和合并numpy都不是t

我有3D(64,64,64)形状(椅子),当我使用tf操作将其重塑为(8,32,32),然后执行我的操作深度学习操作,然后使用tf重塑将其返回到(64,64,64)形状看起来非常糟糕,实际上没有形状,只有奇怪的外观未知形状(100%看起来不像椅子)

但是,如果我使用我构建的函数来划分32乘32,并将它们堆叠为(8,32,32,32),我将其用作DL模型的输入。我使用的输出(8,32,32,32)也使用组合函数,我通过反转切片函数来重新组合,得到了好看的形状

问题是函数切片和合并numpy都不是tf。我必须端到端地训练模型,所以我需要在tensorflow中切片或合并的等效函数

 def slice(self,size, obj):
    #print('inside')
    oldi = 0
    newi = 0
    oldj = 0
    newj = 0
    oldk = 0
    newk = 0
    lst = []
    s = obj.shape[0]
    s += 1
    for i in range(size, s, size):
        if (newi == s - 1):
            oldi = 0
        else:
            oldi = newi
        for j in range(size, s, size):
            if (newj == s - 1):
                oldj = 0
            else:
                oldj = newj
            for k in range(size, s, size):
                newi = i
                newj = j
                newk = k
                slc = obj[oldi:newi, oldj:newj, oldk:newk]

                #print(oldi,':',newi,',',oldj,':',newj,',',oldk,':',newk)
                #print(slc.shape)
                lst.append(slc)

                if (newk == s - 1):
                    oldk = 0
                else:
                    oldk = newk
                # print(slc.shape)
    return lst



def combine(self,lst, shape, size):
    oldi = 0
    newi = 0
    oldj = 0
    newj = 0
    oldk = 0
    newk = 0

    obj = np.zeros((shape, shape, shape))
    s = shape
    s += 1
    counter = 0
    for i in range(size, s, size):
        if (newi == s - 1):
            oldi = 0
        else:
            oldi = newi
        for j in range(size, s, size):
            if (newj == s - 1):
                oldj = 0
            else:
                oldj = newj
            for k in range(size, s, size):
                newi = i
                newj = j
                newk = k
                obj[oldi:newi, oldj:newj, oldk:newk] = lst[counter]
                counter += 1

                #print(oldi,':',newi,',',oldj,':',newj,',',oldk,':',newk)
                # print(slc.shape)

                if (newk == s - 1):
                    oldk = 0
                else:
                    oldk = newk

    return obj

换言之,我想要模拟tensorflow操作

以下函数

def combine(self,lst, shape, size):
oldi = 0
newi = 0
oldj = 0
newj = 0
oldk = 0
newk = 0

obj = np.zeros((shape, shape, shape))
s = shape
s += 1
counter = 0
for i in range(size, s, size):
    if (newi == s - 1):
        oldi = 0
    else:
        oldi = newi
    for j in range(size, s, size):
        if (newj == s - 1):
            oldj = 0
        else:
            oldj = newj
        for k in range(size, s, size):
            newi = i
            newj = j
            newk = k
            obj[oldi:newi, oldj:newj, oldk:newk] = lst[counter]
            counter += 1

            #print(oldi,':',newi,',',oldj,':',newj,',',oldk,':',newk)
            # print(slc.shape)

            if (newk == s - 1):
                oldk = 0
            else:
                oldk = newk

return obj

添加tensorflow代码段,该代码段给出了“难看”的形状。如果x=(64,64,64),则只需执行常规的整形操作即可。整形(x,(8,32,32))我只需要在一步中将(64,64,64)切片为(8,32,32),在一步中将其反向