Python ValueError:将字典输入传递给不';t没有FeatureLayer,因为第一层是错误的

Python ValueError:将字典输入传递给不';t没有FeatureLayer,因为第一层是错误的,python,python-3.x,tensorflow,keras,tf.keras,Python,Python 3.x,Tensorflow,Keras,Tf.keras,我已尝试运行以下代码,但出现以下错误: 文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”, 第819行,适合 使用多处理=使用多处理) 文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u c

我已尝试运行以下代码,但出现以下错误:

文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”, 第819行,适合
使用多处理=使用多处理)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training\u v2.py”, 第235行,适合
使用多处理=使用多处理)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training\u v2.py”, 第593行,过程中培训输入
使用多处理=使用多处理)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training\u v2.py”, 第706行,进程内输入
使用多处理=使用多处理)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python37\lib\site packages\tensorflow\u core\Python\keras\engine\data\u adapter.py”, 第702行,在init
x=标准化功能(x)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training\u v2.py”, 第660行,在标准化功能中
标准化(数据集,从数据集中提取张量=False)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”, 第2346行,在\u标准化\u用户\u数据中
所有输入,y输入,dict输入=自我。用输入(x,y)建立模型 文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”, 第2572行,在带有输入的构建模型中
自我设置输入(转换输入)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”, 第2647行,输入设置中
输入=自身。\设置\输入\属性(输入)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\training\tracking\base.py”, 第457行,在\u方法\u包装中
结果=方法(自身、*args、**kwargs)
文件 “C:\Users\TomerK\AppData\Local\Programs\Python\37\lib\site packages\tensorflow\u core\Python\keras\engine\training.py”, 第2681行,在设置输入属性中
raise VALUERROR('将字典输入传递给顺序模型'
ValueError:将字典输入传递给顺序模型 没有FeatureLayer,因为第一层是错误的

代码:


我昨天遇到了你的问题。以下是为我解决问题的方法:

第一层应为tf.keras.layers.DenseFeatures类型

第一层必须用tf.feature\u列对象数组实例化。碰巧我的所有列都是数字,所以我的数组是:

featureColumns = [tf.feature_column.numeric_column(columnNames[i], normalizer_fn= lambda x: (x - mean[i])/std[i]) for i in range(len(columnNames[:-1]))]
注意:正如您所看到的,normalizer_fn arg也非常有用。如果您需要,它可以消除任何额外的规范化预处理层的需要

于是我的图层变成:

layers.DenseFeatures(feature_columns=featureColumns, trainable=True)
我相信这会解决你问题中提到的上述错误

ValueError:将字典输入传递给顺序模型 没有FeatureLayer,因为第一层是错误的


指定第一个密集层模型的
input\u shape
参数是否有帮助?@JST99我尝试编写:tf.keras.layers.dense(128,activation='relu',input\u shape=(train\u dataset.shape[1],),但却出现了另一个错误:AttributeError:“DatasetV1Adapter”对象没有属性“shape”我在没有笔记本电脑的情况下通过手机回复您的代码,因此请原谅我将您引向了错误的方向。但是,
train\u dataset
似乎不是numpy格式。在
上调用numpy的
shape
属性>train\u dataset
,您可能希望执行类似于
train\u dataset=tfds.as\u numpy(tfds.load(name=“rock\u you”,split=“train[:75%]”)的操作。
@JST99我只按照您所说的
执行了
,但出现了以下错误:
值错误:请以2或3个元素的列表或元组形式提供模型输入:(输入,目标)或(输入、目标、样本权重)收到{'password':}
很抱歉,我忘了提及示例中提到的columnNames数组的末尾有其标签列名,这就是为什么我使用columnNames[:-1]获取表示featureColumns变量所需的所有列的键。
layers.DenseFeatures(feature_columns=featureColumns, trainable=True)