如何将张量的一个像素重复到新张量中的所有像素?

时间:2019-03-19 20:55:46

标签: python tensorflow keras

我在keras中有一个名为wtm的shape(1,4,4,1)的张量,它是输入。现在我需要访问该张量的每个像素,并且每次将其每个像素散布到一个新的(1,28,28)张量并添加到编码器中。例如,假设形状为(1,4,4,1)的wtm的值为0或1。首先,我需要知道该张量的每个像素的值是多少,然后生成形状为(1,28, 28,1),使其所有值均与上述像素的值相同。我想我应该使用lambda层,但是我不知道如何访问张量的每个值?你能告诉我我该怎么做吗?

  wtm=Input((4,4,1))
    image = Input((28, 28, 1))
    conv1 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl1e')(image)
    conv2 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl2e')(conv1)
    conv3 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl3e')(conv2)

    BN=BatchNormalization()(conv3)
    encoded =  Conv2D(1, (5, 5), activation='relu', padding='same',name='encoded_I')(BN)

我需要这样的东西

wtmN=Kr.layers.Lambda(K.tile,arguments={'n':(1,28,28,1)})(wtm[:,1,1,:])
add_const = Kr.layers.Lambda(lambda x: x[0] + x[1])
encoded_merged = add_const([encoded,wtmN])

但是会产生此错误:

  

回溯(最近通话最近一次):

     

文件“”,第64行,在       wtmN = Kr.layers.Lambda(K.tile,arguments = {'n':( 1,28,28,1)})(wtm [:,1,1,:])

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ base_layer.py”,   第457行,致电       输出= self.call(输入,** kwargs)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ layers \ core.py”,   687行,正在通话中       返回self.function(inputs,** arguments)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ backend \ tensorflow_backend.py”,   第2191行,在图块中       返回tf.tile(x,n)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ ops \ gen_array_ops.py”,   线8805,在磁贴中       “平铺”,input = input,multiples = multiples,name = name)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ op_def_library.py”,   _apply_op_helper中的第787行       op_def = op_def)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ util \ deprecation.py”,   第488行,在new_func中       返回func(* args,** kwargs)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py”,   第3274行,在create_op中       op_def = op_def)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py”,   第1792行,在 init 中       control_input_ops)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py”,   第1631行,位于_create_c_op中       引发ValueError(str(e))

     

ValueError:“ Lambda_1 / Tile”的形状必须为2级,但必须为4级   (op:“平铺”),输入形状为[?,1],[4]。

0 个答案:

没有答案