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

如何从Keras预训练ResNet/ResNet3D提取层特征并转Numpy数组

Extracting Features from Keras Models for SVM Classification

1. Extracting Features from a Pre-trained 2D ResNet in Keras

If you're working with a standard pre-trained ResNet (like ResNet50 or ResNet152 from Keras Applications), pulling features from a specific layer is straightforward. Here's how to do it:

  • Load the pre-trained model: You can load the full model (including all layers) if you want to target an intermediate layer:
    from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input
    from tensorflow.keras.models import Model
    
    # Load ResNet50 with ImageNet weights
    base_model = ResNet50(weights='imagenet', include_top=True)
    
  • Define your feature extractor: Pick the layer you want to use (either by name or index) and create a new model that maps the original input to this layer's output:
    # Example: Use the 'conv5_block3_out' layer (adjust to your target layer)
    target_layer = base_model.get_layer('conv5_block3_out').output
    feature_extractor = Model(inputs=base_model.input, outputs=target_layer)
    
  • Preprocess your data: Match the input preprocessing the pre-trained model expects (e.g., pixel scaling):
    # Assuming your input images are in a numpy array X of shape (num_samples, 224, 224, 3)
    processed_X = preprocess_input(X)
    
  • Extract and flatten features: Generate features and reshape them into 1D vectors (required for SVM):
    features = feature_extractor.predict(processed_X)
    flattened_features = features.reshape(features.shape[0], -1)
    

2. Your ResNet3D Case: Next Steps to Get Numpy Features for SVM

You’re already off to a great start with your existing code! Here’s how to finish extracting features ready for your SVM classifier:

Step 1: Create a Feature Extraction Model

Wrap your target layer output into a dedicated model that can process your input data. Note: If model.layers[-1] is the final classification layer (like a softmax Dense layer), you might get better results using an earlier layer (e.g., the global pooling layer before the classifier). But if you specifically want the last layer’s output, proceed with:

from tensorflow.keras.models import Model

# Build a model that outputs your target layer's features
feature_extractor = Model(inputs=model.input, outputs=dns)

Step 2: Prepare Your Input Data

Ensure your input data matches the shape your ResNet3D was trained on: (num_samples, 128, 96, 96, 3). Use the same preprocessing steps you applied during model training (e.g., normalization, scaling) to avoid mismatches.

Step 3: Extract Features as Numpy Arrays

Run the predict method to generate features as a numpy array:

# Replace X_data with your actual input data array
features = feature_extractor.predict(X_data)

Step 4: Flatten Features for SVM

SVM classifiers require 1D feature vectors per sample. Flatten multi-dimensional features into a 2D array:

flattened_features = features.reshape(features.shape[0], -1)

Step 5: Train Your SVM Classifier

Now you can use these flattened features directly with scikit-learn’s SVM implementation:

from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

# Split your data into train/test sets
X_train, X_test, y_train, y_test = train_test_split(flattened_features, y_labels, test_size=0.2)

# Initialize and train the SVM (adjust kernel/parameters as needed)
svm = SVC(kernel='rbf')
svm.fit(X_train, y_train)

# Evaluate performance
accuracy = svm.score(X_test, y_test)
print(f"SVM Classification Accuracy: {accuracy:.2f}")

Pro Tip

If the last layer’s features underperform, try using an earlier layer (e.g., model.layers[-3].output to skip the final dense layers). Intermediate layers often capture more general, transferable features that work better for SVM tasks.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:43:17