def get_train_dataset(file_path, **kwargs):
dataset = tf.data.experimental.make_csv_dataset(
file_path,
batch_size=5,
label_name=LABEL_COLUMN,
na_value="?",
num_epochs=1,
ignore_errors=True,
**kwargs)
return dataset
raw_train_data = get_train_dataset(train_file_path, select_columns=CSV_COLUMNS)
我从“ make_csv_dataset”函数创建了一个DataSet,它是OrderDict的PrefectDataset。但是,当我拟合模型时:
embedding = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"
hub_layer = hub.KerasLayer(embedding, input_shape=[],
dtype=tf.string, trainable=True)
model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
history = model.fit(train_data.shuffle(10000),
epochs=20,
validation_data=val_data,
verbose=1)
它报告一个错误:
File "/home/my-env/tf/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.py", line 118, in <listcomp>
inputs = [inputs[key] for key in model._feed_input_names]
KeyError: 'keras_layer_input'
我希望将此OrderedDictionary转换为TF.Tensor,然后“ fit”方法应该起作用。怎么做?还是有其他解决方法?
在另一篇文章中,我看到了:
The not very elegant workaround you can try is to match the name of input layer with csv column name
我的csv文本列名称为“文本”。如果我想使用上述解决方法,该怎么做?
答案 0 :(得分:0)
我认为问题出在其他地方,但是首先更改fit
内部的数据集名称。您没有在任何地方定义train_data
变量。
如果仍然无法解决问题,请用此行替换get_train_data
,同时将值添加到其中的相应参数。
dataset = tf.data.experimental.make_csv_dataset('PATH OR FILE NAME', batch_size = 1,select_columns = ['Column1','Label'], label_name = 'Label', num_epochs = 1 ,shuffle = True)