如何修复“TypeError:添加的图层必须是类图层的实例。”在 Python 中
Posted
技术标签:
【中文标题】如何修复“TypeError:添加的图层必须是类图层的实例。”在 Python 中【英文标题】:How to fix "TypeError: The added layer must be an instance of class Layer." in Python 【发布时间】:2019-08-19 20:04:15 【问题描述】:我已经编写了那个小小的 helloworld 类型的神经网络。问题是我经常收到这样的错误:
"Traceback (most recent call last):
File "C:/Users/Pigeonnn/PycharmProjects/Noss/Network.py", line 21, in <module>
model.add(keras.layers.InputLayer(input_shape))
File "C:\Users\Pigeonnn\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\training\checkpointable\base.py", line 442, in _method_wrapper
method(self, *args, **kwargs)
File "C:\Users\Pigeonnn\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\sequential.py", line 145, in add
'Found: ' + str(layer))
TypeError: The added layer must be an instance of class Layer. Found: <keras.engine.input_layer.InputLayer object at 0x0000015EDB394DA0>"
这是我的代码:
import keras
import numpy as np
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.utils import shuffle
import tensorflow as tf
seed = 10
np.random.seed(seed)
dataset = np.loadtxt("dataset2.csv",delimiter=',',skiprows=1)
dataset = shuffle(dataset)
X = dataset[:,2:]
Y = dataset[:,1]
(X_train,X_test,Y_train,Y_test) = train_test_split(X, Y, test_size=0.15, random_state=seed)
input_shape = (13,)
model = tf.keras.models.Sequential()
model.add(keras.layers.InputLayer(input_shape))
model.add(keras.layers.core.Dense(128, activation='relu'))
model.add(keras.layers.core.Dense(128, activation='relu'))
model.add(keras.layers.core.Dense(4, activation='sigmoid'))
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(X_train,Y_train,epochs=20)
编辑:经过一些调整(更改损失函数,删除 tf 模型),我有另一个错误,这次是:
回溯(最近一次通话最后): 文件“C:/Users/Pigeonnn/PycharmProjects/Noss/Network.py”,第 28 行,在 model.fit(X_train,Y_train,epochs=20) 文件“C:\Users\Pigeonnn\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\engine\training.py”,第 952 行,适合 批次大小=批次大小) _standardize_user_data 中的文件“C:\Users\Pigeonnn\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\engine\training.py”,第 789 行 exception_prefix='目标') 文件“C:\Users\Pigeonnn\AppData\Local\Programs\Python\Python37\lib\site-packages\keras\engine\training_utils.py”,第 138 行,位于standardize_input_data str(数据形状)) ValueError:检查目标时出错:预期dense_3的形状为(4,),但得到的数组的形状为(1,)【问题讨论】:
我用完整的 Traceback 编辑了帖子 我知道,我检查了那个帖子。实际上,我认为这些线程并不足以帮助我。 【参考方案1】:您同时使用了tf.keras
和keras
模块,它们不兼容。只使用一个并保持一致。
【讨论】:
它有帮助!但实际上还有另一个错误。现在它说:ValueError:检查目标时出错:预期dense_3的形状为(4,),但数组的形状为(1,)。要编辑线程 你的问题是二分类还是多分类?我认为这里的问题是最后一个密集层的激活函数 - sigmoid 仅适用于二进制问题,那么实际上你的层应该有一个输出节点。如果你有 4 个类,正如 Dense 中的 4 个节点所建议的那样,你应该使用 softmax。以上是关于如何修复“TypeError:添加的图层必须是类图层的实例。”在 Python 中的主要内容,如果未能解决你的问题,请参考以下文章