Python 如何解决ValueError:模型的输出张量必须是Keras“Layer”的输出(因此保存过去的层元数据)。?

Python 如何解决ValueError:模型的输出张量必须是Keras“Layer”的输出(因此保存过去的层元数据)。?,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我试图在keras中实现一个3Dcnn模型,但我对如何调用我的模型有一个问题。运行以下代码: ... ... ... input_layer = Input((16, 16, 16, 3)) x = inception_v4_stem(input_layer) for i in range(num_A_blocks): x = inception_v4_A(x) x = inception_v4_reduction_A(x) for i in range(num_B_blocks):

我试图在keras中实现一个3Dcnn模型,但我对如何调用我的模型有一个问题。运行以下代码:

...
...
...
input_layer = Input((16, 16, 16, 3))
x = inception_v4_stem(input_layer)
for i in range(num_A_blocks):
    x = inception_v4_A(x)
x = inception_v4_reduction_A(x)
for i in range(num_B_blocks):
    x = inception_v4_B(x)
x = inception_v4_reduction_B(x)
for i in range(num_C_blocks):
    x = inception_v4_C(x)

x = AveragePooling3D((4, 4, 4), strides=(1, 1, 1), padding="same", data_format="channels_last")
x = Dropout(0.5)
x = Flatten()

x = Dense(nb_classes, activation='softmax')

## define the model with input layer and output layer
model = Model(inputs = input_layer, outputs = x)

model.summary()

model.compile(loss=categorical_crossentropy, optimizer=Adadelta(lr=0.1), metrics=['acc'])
model.fit(x=xtrain, y=y_train, batch_size=128, epochs=50, validation_split=0.2)
我得到以下错误:

Traceback (most recent call last):
  File "kI3DV2y.py", line 275, in <module>
    model = Model(inputs = [input_layer], outputs = x)
  File "C:\Users\sancy\Anaconda3\envs\tensorflow\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\sancy\Anaconda3\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 94, in __init__
    self._init_graph_network(*args, **kwargs)
  File "C:\Users\sancy\Anaconda3\envs\tensorflow\lib\site-packages\keras\engine\network.py", line 198, in _init_graph_network
    'Found: ' + str(x))
ValueError: Output tensors to a Model must be the output of a Keras `Layer` (thus holding past layer metadata). Found: <keras.layers.core.Dense object at 0x000001EDAEC47348>

您没有正确地将层与函数API一起使用,因为您没有向层提供输入。这是正确的方法:

x = AveragePooling3D((4, 4, 4), strides=(1, 1, 1), padding="same", data_format="channels_last")(x)
x = Dropout(0.5)(x)
x = Flatten()(x)

x = Dense(nb_classes, activation='softmax')(x)

当我这样做时,我得到:
ValueError:Layer average\u poolg3d\u 4是用一个不是符号张量的输入调用的。收到的类型:。完整输入:[]。层的所有输入都应该是张量。
回溯(最近一次调用最后一次):文件“kI3DV2y.py”,第268行,在x=averagepoolg3d((4,4,4),跨步=(1,1,1),padding=“same”,data\u format=“channels\u last”)(x)文件“C:\Users\sancy\Anaconda3\envs\tensorflow\lib\site packages\keras\engine\base\u layer.py”,第446行,在“C:\Users\sancy\Anaconda3\envs\tensorflow\lib\site packages\keras\engine\base\u layer.py”文件“C:\Users\sancy\Anaconda3\envs\tensorflow\lib\site packages\keras\engine\base\u layer.py”的第316行中,在“assert\u input\u compatibility str(inputs)+”中。层“
@SanOlans”的所有输入您似乎都有相同的问题,即在初始函数中没有正确使用函数API。
x = AveragePooling3D((4, 4, 4), strides=(1, 1, 1), padding="same", data_format="channels_last")(x)
x = Dropout(0.5)(x)
x = Flatten()(x)

x = Dense(nb_classes, activation='softmax')(x)