You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:07:12