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

如何基于Pandas生成的CSV文件创建TensorFlow Dataset?

从Pandas DataFrame创建TensorFlow Dataset的完整实现

Hey there! Looks like you're trying to turn your Pandas DataFrame (loaded from that CSV with numerical features, image paths, and labels) into a TensorFlow Dataset for training. Let's walk through how to complete that train_input_fn and get everything working properly.

First, let's make sure we have the basics covered—you'll need both pandas and tensorflow imported, which I assume you already have, but just in case:

import pandas as pd
import tensorflow as tf

1. 预处理分类标签

Your labels are categorical (A, B), but TensorFlow models work best with numerical labels. Let's convert those first:

# 读取CSV到DataFrame
mydf = pd.read_csv("TraingDatafinal.csv", header=0)
# 将分类标签转换为0、1这样的数值
mydf['label'] = pd.factorize(mydf['label'])[0]

2. 定义图片加载与预处理函数

Since your CSV has image file paths instead of raw pixel data, we need a helper function to load and process those images:

def load_and_preprocess_image(filepath):
    # 读取图片文件
    img_raw = tf.io.read_file(filepath)
    # 解码JPEG图片(如果是PNG,换成tf.image.decode_png)
    img = tf.image.decode_jpeg(img_raw, channels=3)
    # 调整图片到模型需要的尺寸,这里以224x224为例
    img = tf.image.resize(img, [224, 224])
    # 归一化像素值到0-1范围(很多模型期望这个范围)
    img = tf.cast(img, tf.float32) / 255.0
    return img

3. 补全你的train_input_fn

Now let's finish that input function you started. This function will take your DataFrame, convert it to a Dataset, process the images, and prepare batches for training:

def train_input_fn(df, batch_size=32):
    """An input function for training with Pandas DataFrame input"""
    # 分离特征和标签
    df_copy = df.copy()
    labels = df_copy.pop('label')
    
    # 从DataFrame创建Dataset:特征是字典形式,标签是数值数组
    dataset = tf.data.Dataset.from_tensor_slices((dict(df_copy), labels))
    
    # 定义处理管道:加载图片,替换filepath为图片张量
    def process_data(features, label):
        # 加载并预处理图片
        image = load_and_preprocess_image(features['filepath'])
        # 把filepath字段替换成处理后的图片张量
        features['image'] = image
        del features['filepath']
        return features, label
    
    # 打乱数据、分批次、预取(提升训练效率)
    dataset = dataset.map(
        process_data,
        num_parallel_calls=tf.data.experimental.AUTOTUNE
    ).shuffle(buffer_size=len(df_copy)).batch(batch_size).prefetch(tf.data.experimental.AUTOTUNE)
    
    return dataset

4. 使用示例

Now you can use this function to get your training dataset:

# 创建训练Dataset
train_dataset = train_input_fn(mydf, batch_size=32)

# 可以查看一批数据验证是否正确
for batch_features, batch_labels in train_dataset.take(1):
    print("Batch feature1 shape:", batch_features['feature1'].shape)
    print("Batch feature2 shape:", batch_features['feature2'].shape)
    print("Batch image shape:", batch_features['image'].shape)
    print("Batch labels:", batch_labels.numpy())

关键注意点

  • 图片格式适配: If your images are PNG instead of JPEG, swap tf.image.decode_jpeg with tf.image.decode_png.
  • 图片尺寸: Adjust the resize dimensions ([224, 224]) to match what your model expects (e.g., 299x299 for Inception models).
  • 归一化: Some models expect pixel values in the range [-1, 1]—if that's the case, use img = (tf.cast(img, tf.float32) / 127.5) - 1.0 instead.
  • 大数据集优化: If you have a huge dataset, consider using tf.data.Dataset.from_generator instead of from_tensor_slices to avoid loading all data into memory at once.

内容的提问来源于stack exchange,提问作者S Voll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:27:24