Keras 该层从未被调用,因此没有定义的输入形状

Keras 该层从未被调用,因此没有定义的输入形状,keras,layer,Keras,Layer,我试图定义一个新层,但在使用定义的层后,出现了问题。但是我不知道怎么解决它 # encoding:utf-8 import keras.backend as K from keras.layers import Dense import numpy as np from keras.models import Sequential from sklearn.datasets import load_iris from sklearn.model_selection import train_te

我试图定义一个新层,但在使用定义的层后,出现了问题。但是我不知道怎么解决它

# encoding:utf-8
import keras.backend as K
from keras.layers import Dense
import numpy as np
from keras.models import Sequential
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from keras.utils import to_categorical
from keras.engine.topology import Layer


class MappingLayer(Layer):
    def __init__(self, output_dim, deep, **kwargs):
        self.output_dim = output_dim
        self.deep = deep
        super(MappingLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        # Create a trainable weight variable for this layer.
        self.kernel = self.add_weight(name='kernel',
                                      shape=(input_shape[1], self.deep),
                                      initializer='uniform',
                                      trainable=True)
        self.bias = self.add_weight(name='bias',
                                    shape=(self.input_shape, 1),
                                    initializer='uniform',
                                    trainable=True)
        super(MappingLayer, self).build(input_shape)  # Be sure to call this at the end

    def call(self, inputs):
        x = np.array([inputs ** i for i in range(1, self.deep + 1)])
        return K.sum(K.tf.multiply(self.kernel, x), axis=0) + self.bias

    def compute_output_shape(self, input_shape):
        return input_shape
nb_class = 3
iris = load_iris()
data = iris["data"]
target = iris["target"]
target = to_categorical(target, nb_class)
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2)
model = Sequential()
model.add(MappingLayer(output_dim=nb_class, deep=3, input_shape=(3,)))
model.add(Dense(nb_class, activation="softmax"))
model.compile("adam", loss='categorical_crossentropy')
model.summary()
回溯(最近一次呼叫最后一次): 文件“G:/Programs/PythonProjects/MyReasearch/mapping_net.py”,第46行,在 添加(MappingLayer(输出尺寸=nb\u类,深度=3,输入形状=(3,)) 文件“C:\Users\Admin\AppData\Local\Programs\Python36\lib\site packages\keras\engine\sequential.py”,第165行,添加 层(x) 文件“C:\Users\Admin\AppData\Local\Programs\Python\36\lib\site packages\keras\engine\base\u layer.py”,第431行,在调用中 自我构建(解包单例(输入形状)) 文件“G:/Programs/PythonProjects/MyReasearch/mapping_net.py”,第25行,内部版本 形状=(self.input_形状,1), 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site packages\keras\engine\base\u layer.py”,第886行,输入形状 raise AttributeError('从未调用该层' AttributeError:该层从未被调用,因此没有定义的输入形状

我还在函数调用中打印了一些信息,但没有打印任何内容