如何创建TensorFlow所需的字典类型列?代码问题求助
问题:构建TensorFlow数据集的特征字典不符合预期?
你想要创建符合tf.data.Dataset.from_tensor_slices要求的特征与标签字典,编写的代码如下:
_CSV_FEATURE_COLUMNS = ['vgs', 'vbs', 'vds', 'current'] features_interim = pd.read_csv(train_file, usecols=['vgs', 'vbs', 'vds', 'current']) features_numpy = np.asarray(features_interim, dtype=np.float32) features = dict(zip(_CSV_FEATURE_COLUMNS, features_numpy))
预期得到形如{'vgs': csv中vgs列数据, 'vbs': csv中vbs列数据,...}的字典,但实际结果偏差很大,请问代码存在什么问题?
问题分析与解决方案
嘿,我来帮你揪出问题所在~核心问题出在numpy数组的维度和zip的配对逻辑上:
当你把pandas.DataFrame转成numpy数组时,features_numpy的形状是(样本数量, 4)——也就是每一行对应一个样本的4个特征值。而zip(_CSV_FEATURE_COLUMNS, features_numpy)会把列名和数组的每一行配对,最终得到的字典是{'vgs': 第一个样本的4个值, 'vbs': 第二个样本的4个值,...},这完全不是你想要的按列映射的结构。
两种修复方案:
方案1:直接从DataFrame提取列数据(最简洁)
利用pandas的列访问特性,直接把每一列转成numpy数组:
_CSV_FEATURE_COLUMNS = ['vgs', 'vbs', 'vds', 'current'] features_interim = pd.read_csv(train_file, usecols=_CSV_FEATURE_COLUMNS) features = {col: features_interim[col].values.astype(np.float32) for col in _CSV_FEATURE_COLUMNS}
方案2:转置numpy数组后再zip
把features_numpy转置,让维度变成(4, 样本数量),这样每一行就对应一列数据,再和列名配对:
_CSV_FEATURE_COLUMNS = ['vgs', 'vbs', 'vds', 'current'] features_interim = pd.read_csv(train_file, usecols=_CSV_FEATURE_COLUMNS) features_numpy = np.asarray(features_interim, dtype=np.float32).T # 这里添加转置操作 features = dict(zip(_CSV_FEATURE_COLUMNS, features_numpy))
这两种方法都能得到你预期的字典结构,之后传入tf.data.Dataset.from_tensor_slices就可以正常使用啦。
内容的提问来源于stack exchange,提问作者yuonger741
相关产品推荐
相关产品推荐

