![](/img/trans.png)
[英]Keras - ValueError: The first layer in a Sequential model must get an `input_shape` or `batch_input_shape` argument
[英]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.