【问题标题】:tensorflow multi slice not reshape张量流多片不重塑
【发布时间】:2019-12-09 12:24:13
【问题描述】:

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

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

函数 slice 和 combine numpy not 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

【问题讨论】:

  • 添加 tensorflow 代码 sn-p 给你“难看”的形状。
  • 如果 x=(64,64,64) 只是常规的 reshape 操作我会做 tf.reshape(x, (8,32,32,32))
  • 我想要的只是 tf 函数,我一步将 (64,64,64) 切片到 (8,32,32,32) 并在一步中反向

标签: numpy tensorflow deep-learning


【解决方案1】:

换句话说我想要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

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多