张量流多层不重塑

时间:2019-12-09 12:24:13

标签: numpy tensorflow deep-learning

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

但是,如果我使用将32切成32的函数并将其堆叠为(8,32,32,32),则将其用作DL模型的输入。我还使用了输出(8,32,32,32)的合并函数,该函数通过反转具有良好外观的slice函数来构建以重新组合

问题既可以切片,也可以结合numpy而不是tf。我必须端到端地训练模型,所以我需要在张量流中切片或组合的等效函数

 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

1 个答案:

答案 0 :(得分:0)

换句话说,我想模拟张量流

以下功能

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