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:该层从未被调用,因此没有定义的输入形状
我还在函数调用中打印了一些信息,但没有打印任何内容