当前位置: 首页 > 知识库问答 >
问题:

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

程鸿煊
2023-03-14

我尝试运行以下代码,但得到了这个错误:

文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\引擎\training.py",第819行,适合
use_multiprocessing=use_multiprocessing)
文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\引擎\training_v2.py",第235行,在适合
use_multiprocessing=use_multiprocessing)
文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\引擎\training_v2.py",第593行,在_process_training_inputs
use_multiprocessing=use_multiprocessing)
文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\Engine\training_v2.py",第706行,在_process_inputs
use_multiprocessing=use_multiprocessing)
File"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\Engine\data_adapter.py",第702行,在init
x=standardize_function(x)
File"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\引擎\training_v2.py",第660行,在standardize_function
标准化(数据集,extract_tensors_from_dataset=False)
文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\引擎\training.py",第2346行,_standardize_user_data
all_inputs,y_input,dict_inputs=自己。_build_model_with_inputs(x,y)文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\Engine\training.py",第2572行,_build_model_with_inputs
自己。_set_inputs(cast_inputs)
File"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\Engine\training.py",第2647行,在_set_inputs
输入=自己。_set_input_attrs(输入)
文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\训练\跟踪\base.py",第457行,_method_wrapper
结果=方法(自己,*args,**kwargs)
文件"C:\用户\TomerK\AppData\本地\程序\Python\Python37\lib\site-包\tensorflow_core\python\keras\Engine\training.py",第2681行,在_set_input_attrs
提高值错误('传递字典输入到顺序模型'
值错误:传递字典输入到没有FeatureLayer作为第一层的顺序模型是一个错误。

代码:

# -*- coding: utf-8 -*-
import os
#os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

import tensorflow as tf
import tensorflow_datasets as tfds

try:
    model = keras.models.load_model("passrockmodel.h5")
except:
    print('\nDownloading Train Dataset...\n')
    train_dataset = tfds.load(name="rock_you", split="train[:75%]")
    assert isinstance(train_dataset, tf.data.Dataset)

    print('\nDownloading Test Dataset...\n')
    test_dataset = tfds.load("rock_you", split='train[-25%:]')
    assert isinstance(test_dataset, tf.data.Dataset)

    model = tf.keras.Sequential([
      tf.keras.layers.Dense(128, activation='relu'),
      tf.keras.layers.Dense(128, activation='relu'),
      tf.keras.layers.Dense(1, activation='sigmoid'),
    ])

    model.compile(
        loss='binary_crossentropy',
        optimizer='adam',
        metrics=['accuracy'])


    model.fit(train_dataset, epochs=20)

    model.save("passrockmodel.h5")


test_loss, test_accuracy = model.evaluate(test_dataset)

print('\nPredicting...\n')

predictions = model.predict(test_dataset)

print(predictions[0])

共有1个答案

皇甫夕
2023-03-14

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

您的第一层应该是DenseFeaturetf.keras.layers.类型

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

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_fnarg也非常有用。它可以消除任何额外的标准化预处理层的需要,如果你需要它。

所以我的图层变成了:

layers.DenseFeatures(feature_columns=featureColumns, trainable=True)

我相信这会解决你问题中提到的错误。引用为

ValueError:将字典输入传递到没有FeatureLayer作为第一层的序列模型是错误的。

 类似资料:
  • 问题内容: 这是我的代码: 控制器: 看法: 问题答案: 这段代码: 尝试返回 单个 结果。它抱怨它想要 一系列 结果。因此,您可以使用: 或者: 顺便说一下,我个人将在这里摆脱查询表达式-它使代码变得比所需的更为复杂。例如,您可以将我的第一个选项重写为: 甚至:

  • 问题内容: 我想使用字典在python中调用一个函数。 这是一些代码: 这可以打印,但我希望只打印test。 我希望它可以类似地工作以获取更多参数: 这可能吗? 问题答案: 最后自己解决了。很简单,我只是缺少运算符来解开字典 因此,我的示例变为:

  • 我需要将一个json字符串作为值传递给POST请求正文的一个参数。我的请求正文如下所示: 对于参数3,我需要以json格式传递一个字符串值。json文件位于我的本地系统中,是一个巨大的文件,所以如果我可以将其作为jmeter变量传递,这是有意义的。我尝试了以下方法: 添加JSR223预处理器后,代码如下: 但我得到以下错误: 有人能帮我解决这个问题吗?

  • 完全错误: 问题 我一直在努力建立一个神经网络,因为它不断抱怨收到的形状。x\u trian和y\u train的形状都是(20,)但当我将其输入为input\u形状时,它表示希望输入形状的值为20,但实际上收到了(None,1)。 我不明白(无,1)来自哪里,因为当我打印x_train和y_train的形状时,它给了我(20,)。它们都是数字数组。 代码 我试过的 然后我把input_shape

  • 问题内容: 在Keras中创建顺序模型时,我知道您在第一层中提供了输入形状。然后,此输入形状会构成 隐式 输入层吗? 例如,下面的模型明确指定了2个密集层,但这实际上是一个3层模型,即由输入形状隐含的一个输入层,一个具有32个神经元的隐藏密集层,然后一个具有10个可能输出的输出层组成的模型吗? 问题答案: 好吧,实际上它实际上 是 一个隐式输入层,即您的模型是一个具有三层“输入,隐藏和输出”的“老

  • 问题内容: 我的密码 第一个文件: 第二档: 在上面的代码中,仅将“数据”字典的键传递给,但我希望键值对传递。如何纠正呢? 我希望这样被修改 这是我的要求,根据此给出答案 编辑: 字典键 类 更改为 标准 问题答案: 如果要像这样使用它们,请正常定义变量名称的函数: 现在,您可以在 调用 函数时使用: 它会按您想要的方式工作。 PS 请勿使用。等保留字(例如,改用)