Numpy tensorflow多层切片不整形
我有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中切片或合并的等效函数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
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),在一步中将其反向