我嘗試開發一個網絡,并使用 python 生成器作為數據提供者。一切看起來都很好,直到模型開始適合,然后我收到此錯誤:ValueError: `y` argument is not supported when using dataset as input.我校對了每一行,我認為問題出在網絡的格式x_test和y_test饋送上。經過數小時的谷歌搜索并多次更改格式后,錯誤仍然存在。你能幫我修一下嗎?您可以在下面找到完整的代碼:import osimport numpy as npimport pandas as pdimport re # To match regular expression for extracting labelsimport tensorflow as tfprint(tf.__version__)def xfiles(filename): if re.match('^\w{12}_x\.csv$', filename) is None: return False else: return Truedef data_generator(): folder = "i:/Stockpred/csvdbase/datasets/DS0002" file_list = os.listdir(folder) x_files = list(filter(xfiles, file_list)) x_files.sort() np.random.seed(1729) np.random.shuffle(x_files) for file in x_files: filespec = folder + '/' + file xs = pd.read_csv(filespec, header=None) yfile = file.replace('_x', '_y') yfilespec = folder + '/' + yfile ys = pd.read_csv(open(yfilespec, 'r'), header=None, usecols=[1]) xs = np.asarray(xs, dtype=np.float32) ys = np.asarray(ys, dtype=np.float32) for i in range(xs.shape[0]): yield xs[i][1:169], ys[i][0]dataset = tf.data.Dataset.from_generator( data_generator, (tf.float32, tf.float32), (tf.TensorShape([168, ]), tf.TensorShape([])))dataset = dataset.shuffle(buffer_size=16000, seed=1729)# dataset = dataset.batch(4000, drop_remainder=True)dataset = dataset.cache('R:/Temp/model')def is_test(i, d): return i % 4 == 0def is_train(i, d): return not is_test(i, d)recover = lambda i, d: dtest_dataset = dataset.enumerate().filter(is_test).map(recover)train_dataset = dataset.enumerate().filter(is_train).map(recover)x_test = test_dataset.map(lambda x, y: x)y_test = test_dataset.map(lambda x, y: y)x_train = train_dataset.map(lambda x, y: x)y_train = train_dataset.map(lambda x, y: y)在模型開始適合之前,一切看起來都很好。我收到這個錯誤:ValueError: `y` argument is not supported when using dataset as input.你能幫忙修一下嗎?
3 回答

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
如果您提供數據集作為輸入,那么
type(train_dataset)
應該tensorflow.python.data.ops.dataset_ops.BatchDataset
如果是這樣,只需將此數據集(包括您的 X 和 y 包)提供給模型,
model.fit(train_dataset, batch_size=32, epochs=100)
(是的,這與我們在 sklearn 中的做法略有不同——X 和 y 分別。)
同時,如果你想tensorflow
顯式地使用一個單獨的數據集進行驗證,你必須像這樣使用 kwarg:
model.fit(train_dataset, validation_data=val_dataset, batch_size=32, epochs=100)
哪里val_dataset
是您在模型訓練期間為驗證而保留的單獨數據集。(未測試)。

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
使用model.fit_generator
,并使用(x,y)
輸入數據和標簽的元組??偠灾?/p>
model.fit_generator(train_dataset.as_numpy_iterator(),epochs=100)
添加回答
舉報
0/150
提交
取消