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

如何在Google Colab用TensorFlow构建计数红色圆点的神经网络

红色圆点计数神经网络实现指南

一、自定义标签的数据集构建(替代image_dataset_from_directory)

tf.keras.utils.image_dataset_from_directory是为按文件夹分类的标签设计的,没法直接传入你的自定义字典标签。换用tf.data.Dataset手动构建更灵活,步骤如下:

  1. 匹配图片路径与标签

    import os
    import tensorflow as tf
    from glob import glob
    
    # 假设图片存储在'./red_dots_imgs'文件夹下
    img_paths = glob('./red_dots_imgs/im_*.png')
    label_dict = {"im_001": 3, "im_002": 5, ...} # 你的标签字典
    
    # 提取文件名并匹配对应标签
    labels = []
    for path in img_paths:
        filename = os.path.basename(path).replace('.png', '')
        labels.append(label_dict[filename])
    
  2. 构建并预处理数据集

    def load_preprocess_img(path, label):
        # 加载并解码图片
        img = tf.io.read_file(path)
        img = tf.image.decode_png(img, channels=3)
        # 统一图片尺寸(可根据需求调整,比如224x224)
        img = tf.image.resize(img, (224, 224))
        # 归一化到0-1区间
        img = tf.cast(img, tf.float32) / 255.0
        # 可选:只保留红色通道,过滤其他颜色干扰
        img = img[:, :, 0:1]
        return img, label
    
    # 构建基础数据集
    dataset = tf.data.Dataset.from_tensor_slices((img_paths, labels))
    # 并行加载预处理
    dataset = dataset.map(load_preprocess_img, num_parallel_calls=tf.data.AUTOTUNE)
    
    # 划分训练/验证集,打乱并分批
    train_size = int(0.8 * len(img_paths))
    train_ds = dataset.take(train_size).shuffle(100).batch(32).prefetch(tf.data.AUTOTUNE)
    val_ds = dataset.skip(train_size).batch(32).prefetch(tf.data.AUTOTUNE)
    

二、计数模型的层组合(无需层数等于最大圆点数量)

圆点计数是回归任务(预测连续数值),不是分类任务,完全不需要让层数等于最大圆点数量。推荐用「CNN特征提取+全连接层回归」的结构:

示例模型结构

model = tf.keras.Sequential([
    # 特征提取:卷积+池化堆叠
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(224,224,1)), # 单通道输入对应(224,224,1)
    tf.keras.layers.MaxPooling2D((2,2)),
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D((2,2)),
    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D((2,2)),
    # 扁平化特征图为一维向量
    tf.keras.layers.Flatten(),
    # 全连接层做特征映射
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(64, activation='relu'),
    # 输出层:回归任务用单神经元,默认激活函数为linear
    tf.keras.layers.Dense(1)
])

# 编译模型:回归任务用均方误差损失
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

关键说明

  • 卷积层负责提取圆点的形状、颜色特征,堆叠层数根据图片复杂度调整(3-5层足够应对大多数场景)
  • 输出层仅需1个神经元,直接预测圆点数量,无需对应每个可能的计数类别
  • 损失函数选mse(均方误差),评估指标用mae(平均绝对误差)更直观,代表预测值与真实值的平均偏差

额外优化建议

  • 数据增强:如果圆点的位置、大小存在差异,可添加tf.keras.layers.RandomFlip、RandomRotation等增强层,提升模型泛化能力
  • 红色通道预处理:只保留红色通道能过滤其他颜色干扰,让模型更专注于红色圆点的特征

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:15:37