簡體   English   中英

ValueError:將字典輸入傳遞給沒有 FeatureLayer 作為第一層的順序模型是一個錯誤

[英]ValueError: Passing a dictionary input to a Sequential Model which doesn't have FeatureLayer as the first layer is an error

我試過運行以下代碼,但出現此錯誤:

文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training.py”,第 819 行,適合
use_multiprocessing=use_multiprocessing)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training_v2.py”,第 235 行,適合
use_multiprocessing=use_multiprocessing)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training_v2.py”,第 593 行,在 _process_training_inputs
use_multiprocessing=use_multiprocessing)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training_v2.py”,第 706 行,在 _process_inputs
use_multiprocessing=use_multiprocessing)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\data_adapter.py”,第 702 行,在init 中
x = standardize_function(x)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training_v2.py”,第660行,在standardize_function
標准化(數據集,extract_tensors_from_dataset=False)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training.py”,第 2346 行,在 _standardize_user_data
all_inputs, y_input, dict_inputs = self._build_model_with_inputs(x, y) 文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training.py ",第 2572 行,在 _build_model_with_inputs 中
self._set_inputs(cast_inputs)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training.py”,第 2647 行,在 _set_inputs
輸入 = self._set_input_attrs(inputs)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\training\\tracking\\base.py”,第 457 行,在 _method_wrapper
結果 = 方法(自我,*args,**kwargs)
文件“C:\\Users\\TomerK\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\keras\\engine\\training.py”,第 2681 行,在 _set_input_attrs
raise ValueError('將字典輸入傳遞給順序模型'
ValueError:將字典輸入傳遞給沒有 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])

我昨天遇到了你的問題。 這是為我解決的問題:

你的第一層應該是tf.keras.layers.DenseFeatures類型

第一層必須使用tf.feature_column對象數組實例化。 碰巧我所有的列都是數字,所以我的數組是:

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參數也非常有用。 如果您需要,它可以消除任何額外的標准化預處理層的需要。

所以我的層變成了:

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

我相信這應該可以解決您問題中提到的錯誤。 引用為

ValueError:將字典輸入傳遞給沒有 FeatureLayer 作為第一層的序列模型是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM