如何解决此错误:AttributeError:'NoneType'对象没有属性'_inbound_nodes'? [英] how do I solve this error : AttributeError: 'NoneType' object has no attribute '_inbound_nodes'?

查看:1877
本文介绍了如何解决此错误:AttributeError:'NoneType'对象没有属性'_inbound_nodes'?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个自动编码器,我尝试使用lambda在中间层中使用输入层的特定值,并产生一个新的张量并发送到下一层,但是会产生此错误:

I have an autoencoder and I try to use the specific value of input layer in in intermediate layer using lambda and produce a new tensor and send to next layers but it produces this error:

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

Traceback (most recent call last):

文件",第99行,在 型号=模型(输入= [图像,wtm],输出=解码)

File "", line 99, in model=Model(inputs=[image,wtm],outputs=decoded)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ legacy \ interfaces.py", 第91行,在包装器中 返回func(* args,** kwargs)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper return func(*args, **kwargs)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 第93行,初始化 self._init_graph_network(* args,** kwargs)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 93, in init self._init_graph_network(*args, **kwargs)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", _init_graph_network中的第231行 self.inputs,self.outputs)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 231, in _init_graph_network self.inputs, self.outputs)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", _map_graph_network中的第1366行 tensor_index = tensor_index)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1366, in _map_graph_network tensor_index=tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 在build_map中的1353行 node_index,张量索引)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1353, in build_map node_index, tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 在build_map中的1353行 node_index,张量索引)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1353, in build_map node_index, tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 在build_map中的1353行 node_index,张量索引)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1353, in build_map node_index, tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 在build_map中的1353行 node_index,张量索引)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1353, in build_map node_index, tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 在build_map中的1353行 node_index,张量索引)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1353, in build_map node_index, tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 在build_map中的1353行 node_index,张量索引)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1353, in build_map node_index, tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 在build_map中的1353行 node_index,张量索引)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1353, in build_map node_index, tensor_index)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ network.py", 第1325行,在build_map中 节点= layer._inbound_nodes [node_index]

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\network.py", line 1325, in build_map node = layer._inbound_nodes[node_index]

AttributeError:"NoneType"对象没有属性"_inbound_nodes"

AttributeError: 'NoneType' object has no attribute '_inbound_nodes'

这是我的代码,在添加第一个lambda层之后,它将产生此错误!您能告诉我为什么会发生此错误吗?我感谢您的帮助?我需要的东西是这样的: wtm={[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,1,0,0]}我选择wtm[:,i,j]并生成形状为(28,28,1)且值为wtm [:,i,j]的新张量.

this is my code and after adding the first lambda layer it produces this error! could you please tell why this error has happened? I appreciate your help? the thing I need is sth like this: wtm={[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,1,0,0]} I choose wtm[:,i,j] and produce new tensor with shape (28,28,1) and with value wtm[:,i,j].

wt_random=np.random.randint(2, size=(49999,4,4))
w_expand=wt_random.astype(np.float32)
wv_random=np.random.randint(2, size=(9999,4,4))
wv_expand=wv_random.astype(np.float32)
#w_expand[:,:4,:4]=wt_random
#wv_expand[:,:4,:4]=wv_random
x,y,z=w_expand.shape
w_expand=w_expand.reshape((x,y,z,1))
x,y,z=wv_expand.shape
wv_expand=wv_expand.reshape((x,y,z,1))

#-----------------building w test---------------------------------------------
w_test = np.random.randint(2,size=(1,4,4))
w_test=w_test.astype(np.float32)
#wt_expand=np.zeros((1,28,28),dtype='float32')
#wt_expand[:,0:4,0:4]=w_test
w_test=w_test.reshape((1,4,4,1))

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)

   rep=Kr.layers.Lambda(lambda x:Kr.backend.repeat(x,28))
    a=rep(Kr.layers.Lambda(lambda x:x[1,1])(wtm))

    add_const = Kr.layers.Lambda(lambda x: x[0] + x[1])
    encoded_merged = add_const([encoded,a])


    #-----------------------decoder------------------------------------------------
    #------------------------------------------------------------------------------
    deconv1 = Conv2D(64, (5, 5), activation='elu', padding='same', name='convl1d')(encoded_merged)
    deconv2 = Conv2D(64, (5, 5), activation='elu', padding='same', name='convl2d')(deconv1)
    deconv3 = Conv2D(64, (5, 5), activation='elu',padding='same', name='convl3d')(deconv2)
    deconv4 = Conv2D(64, (5, 5), activation='elu',padding='same', name='convl4d')(deconv3)
    BNd=BatchNormalization()(deconv4)
    #DrO2=Dropout(0.25,name='DrO2')(BNd)

    decoded = Conv2D(1, (5, 5), activation='sigmoid', padding='same', name='decoder_output')(BNd) 
    #model=Model(inputs=image,outputs=decoded)

    model=Model(inputs=[image,wtm],outputs=decoded)

    decoded_noise = GaussianNoise(0.5)(decoded)

    #----------------------w extraction------------------------------------
    convw1 = Conv2D(64, (5,5), activation='relu', name='conl1w')(decoded_noise)#24
    convw2 = Conv2D(64, (5,5), activation='relu', name='convl2w')(convw1)#20
    #Avw1=AveragePooling2D(pool_size=(2,2))(convw2)
    convw3 = Conv2D(64, (5,5), activation='relu' ,name='conl3w')(convw2)#16
    convw4 = Conv2D(64, (5,5), activation='relu' ,name='conl4w')(convw3)#12
    #Avw2=AveragePooling2D(pool_size=(2,2))(convw4)
    convw5 = Conv2D(64, (5,5), activation='relu', name='conl5w')(convw4)#8
    convw6 = Conv2D(64, (5,5), activation='relu', name='conl6w')(convw5)#4
    convw7 = Conv2D(64, (5,5), activation='relu',padding='same', name='conl7w',dilation_rate=(2,2))(convw6)#4
    convw8 = Conv2D(64, (5,5), activation='relu', padding='same',name='conl8w',dilation_rate=(2,2))(convw7)#4
    convw9 = Conv2D(64, (5,5), activation='relu',padding='same', name='conl9w',dilation_rate=(2,2))(convw8)#4
    convw10 = Conv2D(64, (5,5), activation='relu',padding='same', name='conl10w',dilation_rate=(2,2))(convw9)#4
    BNed=BatchNormalization()(convw10)
    pred_w = Conv2D(1, (1, 1), activation='sigmoid', padding='same', name='reconstructed_W',dilation_rate=(2,2))(BNed)  

    w_extraction=Model(inputs=[image,wtm],outputs=[decoded,pred_w])

    w_extraction.summary()
(x_train, _), (x_test, _) = mnist.load_data()
x_validation=x_train[1:10000,:,:]
x_train=x_train[10001:60000,:,:]
#
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_validation = x_validation.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))  # adapt this if using `channels_first` image data format
x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))  # adapt this if using `channels_first` image data format
x_validation = np.reshape(x_validation, (len(x_validation), 28, 28, 1))

#---------------------compile and train the model------------------------------
opt=SGD(momentum=0.99)
w_extraction.compile(optimizer='adam', loss={'decoder_output':'mse','reconstructed_W':'binary_crossentropy'}, loss_weights={'decoder_output': 0.2, 'reconstructed_W': 1.0},metrics=['mae'])
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=40)
#rlrp = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=20, min_delta=1E-4, verbose=1)
mc = ModelCheckpoint('best_model_5x5F_dp_gn.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True)
history=w_extraction.fit([x_train,w_expand], [x_train,w_expand],
          epochs=1,
          batch_size=64, 
          validation_data=([x_validation,wv_expand], [x_validation,wv_expand]),
          callbacks=[TensorBoard(log_dir='E:concatnatenetwork', histogram_freq=0, write_graph=False),es,mc])

当我实现它时,显示此错误:

when I implement it, this error is shown:

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

Traceback (most recent call last):

文件",第1行,在 encode_merged = add_const([encoded,a])

File "", line 1, in encoded_merged = add_const([encoded,a])

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

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\engine\base_layer.py", line 457, in call output = self.call(inputs, **kwargs)

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

File "D:\software\Anaconda3\envs\py36\lib\site-packages\keras\layers\core.py", line 687, in call return self.function(inputs, **arguments)

文件",第1行,在 add_const = Kr.layers.Lambda(lambda x:x [0] + x 1 )

File "", line 1, in add_const = Kr.layers.Lambda(lambda x: x[0] + x1)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ ops \ math_ops.py", 第866行,在binary_op_wrapper中 返回func(x,y,name = name)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\tensorflow\python\ops\math_ops.py", line 866, in binary_op_wrapper return func(x, y, name=name)

文件 "D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ ops \ gen_math_ops.py", 第301行,添加 添加",x = x,y = y,名称=名称)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 301, in add "Add", x=x, y=y, 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)

File "D:\software\Anaconda3\envs\py36\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def)

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

File "D:\software\Anaconda3\envs\py36\lib\site-packages\tensorflow\python\util\deprecation.py", line 488, in new_func return func(*args, **kwargs)

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

File "D:\software\Anaconda3\envs\py36\lib\site-packages\tensorflow\python\framework\ops.py", line 3274, in create_op op_def=op_def)

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

File "D:\software\Anaconda3\envs\py36\lib\site-packages\tensorflow\python\framework\ops.py", line 1792, in init control_input_ops)

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

File "D:\software\Anaconda3\envs\py36\lib\site-packages\tensorflow\python\framework\ops.py", line 1631, in _create_c_op raise ValueError(str(e))

ValueError:尺寸必须相等,但对于28则为4 输入形状为[?,28,28,1],[4,28,1]的'lambda_9/add'(op:'Add').

ValueError: Dimensions must be equal, but are 28 and 4 for 'lambda_9/add' (op: 'Add') with input shapes: [?,28,28,1], [4,28,1].

推荐答案

在keras中,每个图层都应该是keras的Layer类的实例.在下一行

In keras every layer should be an instance of keras's Layer class. On the following line

a=rep(wtm[1,1])

您在不使用keras层的情况下选择张量元素.该行导致错误.您应该将行更改为以下内容以解决该错误.

You are selecting tensor element without using keras layer. This line is causing the error. You should change the line to the following to deal with the error.

a=rep(Kr.layers.Lambda(lambda x:x[1,1])(wtm))

编辑1.

由于wtm的形状为[None,4,4,1](您可以尝试打印形状),所以wtm[1,1]将从第一维中选择一个元素,然后从所选元素中选择第一个元素.如果要获取[1,1]形状数组,可以做的是索引前三个维度.在这里,您还应该注意批处理大小,因此,您想要的是具有形状[Batchsize,1]的数组.可以按照以下步骤进行.

Edit 1.

Since wtm has shape of [None, 4,4,1](you can try to print the shape), wtm[1,1] will select one element from first dimension and then the first element from selected element. If you want to get [1,1] shape array what you could do is index the first three dimensions. Here you should mind the batch size too, so what you want is to have array with shape [Batchsize, 1]. This could be done as follows.

new_wtm = Kr.layers.Lambda(lambda x:x[:,1,1,:])(wtm)

现在new_wtm.shape将为[None,1],并且调用repeat方法将生成具有shape [None,rep,1]的数组.

Now new_wtm.shape would be [None, 1] and calling repeat method will produce array with shape[None, rep, 1].

rep=Kr.layers.Lambda(lambda x:Kr.backend.repeat(x,28))
a=rep(Kr.layers.Lambda(lambda x:x[:,1,1,:])(wtm))
print(a.shape) # [None, 28, 1]

我希望这能解决问题

要获取形状为[None,28,28,1]的a,您需要使用平铺方法.

To get a with shape [None, 28, 28,1], you need to use tile method.

rep=Kr.layers.Lambda(lambda x:Kr.backend.tile(x,[1, 28, 28, 1]))
a_1 = Kr.layers.Lambda(lambda x: x[:, 1, 1, :])(wtm)

a=rep(Kr.layers.Reshape([1,1,1])(a_1))

测试代码

from keras.layers import Input, Concatenate, Activation,GaussianNoise,Dropout,BatchNormalization,MaxPool2D,AveragePooling2D
from keras.layers import Conv2D, AtrousConv2D
from keras.models import Model
from keras.datasets import mnist
from keras.callbacks import TensorBoard
from keras import backend as K
from keras import layers
import matplotlib.pyplot as plt
import tensorflow as tf
import keras as Kr
from keras.optimizers import SGD,RMSprop,Adam
from keras.callbacks import ReduceLROnPlateau
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
import numpy as np
import pylab as pl
import matplotlib.cm as cm
import keract
from matplotlib import pyplot
from keras import optimizers
from keras import regularizers
from tensorflow.python.keras.layers import Lambda;
#-----------------building w train---------------------------------------------

#wv_expand=np.zeros((9999,28,28),dtype='float32')
wt_random=np.random.randint(2, size=(49999,4,4))
w_expand=wt_random.astype(np.float32)
wv_random=np.random.randint(2, size=(9999,4,4))
wv_expand=wv_random.astype(np.float32)
#w_expand[:,:4,:4]=wt_random
#wv_expand[:,:4,:4]=wv_random
x,y,z=w_expand.shape
w_expand=w_expand.reshape((x,y,z,1))
x,y,z=wv_expand.shape
wv_expand=wv_expand.reshape((x,y,z,1))

#-----------------building w test---------------------------------------------
w_test = np.random.randint(2,size=(1,4,4))
w_test=w_test.astype(np.float32)
#wt_expand=np.zeros((1,28,28),dtype='float32')
#wt_expand[:,0:4,0:4]=w_test
w_test=w_test.reshape((1,4,4,1))

#wt_expand=wt_expand.reshape((1,28,28,1))

#-----------------------encoder------------------------------------------------
#------------------------------------------------------------------------------
wtm=Input((4,4,1))
image = Input((28, 28, 1))
conv1 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl1e',dilation_rate=(2,2))(image)
conv2 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl2e',dilation_rate=(2,2))(conv1)
conv3 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl3e',dilation_rate=(2,2))(conv2)
#conv3 = Conv2D(8, (3, 3), activation='relu', padding='same', name='convl3e', kernel_initializer='Orthogonal',bias_initializer='glorot_uniform')(conv2)
BN=BatchNormalization()(conv3)
#DrO1=Dropout(0.25,name='Dro1')(BN)
encoded =  Conv2D(1, (5, 5), activation='relu', padding='same',name='encoded_I',dilation_rate=(2,2))(BN)

#-----------------------adding w---------------------------------------


#-----------------------decoder------------------------------------------------
#------------------------------------------------------------------------------
rep0=Kr.layers.Lambda(lambda x:Kr.backend.tile(x,[1, 28, 28, 1]),name='aux0')
a_0 = Kr.layers.Lambda(lambda x: x[:, 0, 0, :])(wtm)

a0=rep0(Kr.layers.Reshape([1,1,1])(a_0))

rep1=Kr.layers.Lambda(lambda x:Kr.backend.tile(x,[1, 28, 28, 1]),name='aux1')
a_1 = Kr.layers.Lambda(lambda x: x[:, 0, 1, :])(wtm)

a1=rep1(Kr.layers.Reshape([1,1,1])(a_1))

rep2=Kr.layers.Lambda(lambda x:Kr.backend.tile(x,[1, 28, 28, 1]),name='aux2')
a_2 = Kr.layers.Lambda(lambda x: x[:, 0, 2, :])(wtm)

a2=rep2(Kr.layers.Reshape([1,1,1])(a_2))

rep3=Kr.layers.Lambda(lambda x:Kr.backend.tile(x,[1, 28, 28, 1]),name='aux3')
a_3 = Kr.layers.Lambda(lambda x: x[:, 0, 3, :])(wtm)

a3=rep3(Kr.layers.Reshape([1,1,1])(a_3))


add_const1 = Kr.layers.Lambda(lambda x: x[0] + x[1]+x[2]+x[3]+x[4],name='decoder_output')
encoded_merged = add_const1([encoded,a0,a1,a2,a3])

w=Model(inputs=[image,wtm],outputs=encoded_merged)

w.summary()
#----------------------training the model--------------------------------------
#------------------------------------------------------------------------------
#----------------------Data preparesion----------------------------------------

(x_train, _), (x_test, _) = mnist.load_data()
x_validation=x_train[1:10000,:,:]
x_train=x_train[10001:60000,:,:]
#
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_validation = x_validation.astype('float32') / 255.
x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))  # adapt this if using `channels_first` image data format
x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))  # adapt this if using `channels_first` image data format
x_validation = np.reshape(x_validation, (len(x_validation), 28, 28, 1))

#---------------------compile and train the model------------------------------
opt=SGD(lr=0.0001,momentum=0.9)
w.compile(optimizer='adam', loss={'decoder_output':'mse'}, metrics=['mae'])
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=40)
mc = ModelCheckpoint('los4x4_repw.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True)
history=w.fit([x_train,w_expand], x_train,
          epochs=1,
          batch_size=32, 
          validation_data=([x_validation,wv_expand], x_validation))
w.summary()

layer_name = 'lambda_96'
intermediate_layer_model = Model(inputs=watermark_extraction.input,outputs=watermark_extraction.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict([x_test[8000:8001],w_test])
fig = plt.figure(figsize=(20, 20))

rows = 8
columns = 8

first = intermediate_output

for i in range(1, columns*rows +1):
    img = intermediate_output[0,:,:,i-1]
    fig.add_subplot(rows, columns, i)
    plt.imshow(img, interpolation='nearest',cmap='gray')
    plt.axis('off')
plt.show()

这篇关于如何解决此错误:AttributeError:'NoneType'对象没有属性'_inbound_nodes'?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆