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

基于Keras的猫狗图像分类模型构建技术问询

Hey there! Let's work through getting your cat-dog classification model sorted out—plus, we’ll lean into the reproducibility you mentioned with that CIFAR-based plane-car model you referenced.

First, let's address that numpy array approach you’re using. While it’s doable, it’s easy to run into issues like inconsistent image sizes or slow loading. Here’s a more streamlined, reproducible workflow that mirrors the structure of that CIFAR model you like:

1. Simplify Data Loading (Ditch Manual Array Building)

Instead of iterating to build a numpy array manually, use your framework’s built-in tools to handle image loading and labeling automatically. For example, with TensorFlow/Keras:

from tensorflow.keras.preprocessing.image import ImageDataGenerator

# Initialize a data generator (start with basic normalization, add augmentation later if needed)
train_datagen = ImageDataGenerator(rescale=1./255)  # Scale pixel values to 0-1

# Load data directly from your folder structure (cats/dogs subfolders auto-labeled)
train_generator = train_datagen.flow_from_directory(
    "your_root_data_folder",
    target_size=(150, 150),  # Standardize all images to this size
    batch_size=32,
    class_mode="binary"  # Binary classification (cat vs dog)
)

If you’re set on keeping the numpy array method, make sure to:

  • Resize every image to the exact same dimensions before adding it to your list
  • Normalize pixel values by dividing by 255
  • Keep your labels perfectly aligned with your images (e.g., cat images first with label 0, dogs with label 1)
  • Convert your final lists to arrays with X = np.array(image_list) and y = np.array(label_list)
2. Build a Reproducible Model (Matching CIFAR Model Logic)

To mirror the reproducibility of that CIFAR plane-car model, start with a clear, seeded model structure. Here’s a solid baseline for cat-dog classification:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# Set random seeds to guarantee reproducibility
tf.random.set_seed(42)

model = Sequential([
    # Convolutional blocks (similar to CIFAR model's feature extraction)
    Conv2D(32, (3, 3), activation="relu", input_shape=(150, 150, 3)),
    MaxPooling2D((2, 2)),
    Conv2D(64, (3, 3), activation="relu"),
    MaxPooling2D((2, 2)),
    Conv2D(128, (3, 3), activation="relu"),
    MaxPooling2D((2, 2)),
    # Classification head
    Flatten(),
    Dense(512, activation="relu"),
    Dense(1, activation="sigmoid")  # Outputs probability for binary classification
])

# Compile the model with standard binary classification settings
model.compile(
    optimizer="adam",
    loss="binary_crossentropy",
    metrics=["accuracy"]
)
3. Train & Validate

Train using the generator (or your numpy arrays) with clear, reproducible steps:

# Train with the generator
history = model.fit(
    train_generator,
    steps_per_epoch=1000 // 32,  # Total train samples / batch size
    epochs=10  # Start with 10 epochs, adjust based on performance
)

# If using numpy arrays instead:
# history = model.fit(X, y, batch_size=32, epochs=10, validation_split=0.2)

The key to matching that CIFAR model’s reproducibility is locking in those random seeds—this ensures every training run starts from the same point, so you’ll get consistent results every time.


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:13:18