在顺序模型中,将整数CSV数据送入Keras Dense第一层。

问题描述 投票:0回答:1

的文件 CSV数据集 但却没有展示如何使用CSV数据集来做任何实际的事情,比如使用数据来训练神经网络。有谁能提供一个直接的例子来演示如何做到这一点,至少要明确数据形状和类型问题,最好还能考虑批处理、洗牌、在不同时间段重复?

例如,我有一个CSV文件,其中包括 M 行,每行是一个整数类标签,后面是 N 的整数,我希望用老式的三层神经网络预测类标签,并将其与 H 隐性神经元。

model = Sequential()
model.add(Dense(H, activation='relu', input_dim=N))
...
model.fit(train_ds, ...)

对于我的数据。M > 50000N > 200. 我试着用数据集来创建数据集,但是......这导致了数据集和模型之间的兼容性问题......但不清楚这些兼容性问题在哪里--是在输入形状、整数(而不是浮动)数据中吗?

train_ds = tf.data.experimental.make_csv_dataset('mydata.csv`, batch_size=B)

然而... 这将导致数据集和模型之间的兼容性问题... 但不清楚这些兼容性问题在哪里 - 它们是在输入形状,整数(而不是浮动)数据,还是在其他地方?

tensorflow keras tensorflow-datasets
1个回答
0
投票

这个问题 可能会提供一些帮助......虽然答案大多与Tensorflow V1.x有关。

可能这个任务不需要CSV数据集。你指出的数据大小可能会适合在内存中,而一个 "数据集 "可能会在内存中。tf.data.Dataset 可能会使你的数据变得更加复杂,而不是有价值的功能。只要你的所有数据都是整数,你可以不用数据集(如下图所示)。

如果你坚持使用CSV数据集的方法,请了解CSV的使用方法有很多,而且加载它们的方法也不一样(例如,请参见 此处此处). 因为CSV可以有多种类型的列(数字、布尔、文本、分类......),所以第一步通常是将CSV数据加载在 栏目式 格式。这提供了对列的访问,通过它们的标签--对预处理很有用。然而,您可能希望向您的模型提供行数据,因此从列到行的转换可能是一个混乱的来源。在某些时候,您可能需要将整数数据转换为浮动数据,但这可能是某些预处理的副作用。

只要您的CSV文件只包含整数,没有缺失的数据,并且有一个头行,您就可以在不使用 tf.data.Dataset,步骤如下:

import numpy as np
from numpy import genfromtxt
import tensorflow as tf

train_data = genfromtxt('train set.csv', delimiter=',')
test_data = genfromtxt('test set.csv', delimiter=',')
train_data = np.delete(train_data, (0), axis=0)    # delete header row
test_data = np.delete(test_data, (0), axis=0)      # delete header row
train_labels = train_data[:,[0]]
test_labels = test_data[:,[0]]
train_labels = tf.keras.utils.to_categorical(train_labels)
# count labels used in training set; categorise test set on same basis
# even if test set only uses subset of categories learning in training
K = len(train_labels[ 0 ])
test_labels = tf.keras.utils.to_categorical(test_labels, K)
train_data = np.delete(train_data, (0), axis=1)    # delete label column
test_data = np.delete(test_data, (0), axis=1)      # delete label column
# Data will have been read in as float... but you may want scaling/normalization...
scale = lambda x: x/1000.0 - 500.0                 # change to suit
scale(train_data)
scale(test_data)

N_train = len(train_data[0])        # columns in training set
N_test = len(test_data[0])          # columns in test set
if N_train != N_test:
  print("Datasets have incompatible column counts: %d vs %d" % (N_train, N_test))
  exit()
M_train = len(train_data)           # rows in training set
M_test = len(test_data)             # rows in test set

print("Training data size: %d rows x %d columns" % (M_train, N_train))
print("Test set data size: %d rows x %d columns" % (M_test, N_test))
print("Training to predict %d classes" % (K))

model = Sequential()
model.add(Dense(H, activation='relu', input_dim=N_train))     # H not yet defined...
...
model.compile(...)
model.fit( train_data, train_labels, ... )    # see docs for shuffle, batch, etc
model.evaluate( test_data, test_labels )
© www.soinside.com 2019 - 2024. All rights reserved.