Skip to content
Back to skills

Custom Neural Architecture Design

ASecurity

Use when designing custom neural network architectures.

  • 2 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 10, 2026
ai-agentspythongit

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add LoopyLuci/Skills --skill custom-neural-architecture-design --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Custom Neural Architecture Design?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Custom Neural Architecture Design
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/loopyluci-custom-neural-architecture-design/badge)](https://www.skillsdirectory.com/skills/loopyluci-custom-neural-architecture-design)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: custom-neural-architecture-design
description: "Use when designing custom neural network architectures."
version: 1.0.0
author: Hermes Agent
license: MIT
metadata:
  hermes:
    tags: [neural-networks, architecture, design, deep-learning, pytorch]
    related_skills: [neural-network-fundamentals, transformer-architectures, attention-mechanisms-deep, state-space-models-mamba, custom-training-loops]
---

# Custom Neural Architecture Design

Systematic process for designing novel neural network architectures from scratch — from conceptual design to implementation, with reusable patterns and building blocks.

## When to Use

- Existing architectures (transformer, CNN, RNN) don't fit your problem's constraints
- You need to design a novel combination of existing building blocks
- You want to optimize architecture for specific efficiency/quality tradeoffs
- Building models for non-standard data types or modalities
- Researching new architectural innovations

## Architecture Design Process

### Phase 1: Problem Analysis

```python
# Answer these questions before designing:
constraints = {
    "data_type": "time-series | images | text | graph | multi-modal",
    "input_shape": (batch, channels, height, width) or (batch, seq_len, dim),
    "output_type": "classification | regression | generation | embedding",
    "latency_budget_ms": 50,
    "memory_budget_mb": 1024,
    "param_budget": int(1e7),  # 10M parameters
    "training_data_size": 100000,
    "deployment": "mobile | server | edge | browser"
}
```

### Phase 2: Building Block Selection

Choose from these composable blocks:

```python
# Core building blocks for any architecture
BLOCKS = {
    "linear":          nn.Linear,          # Fully connected
    "conv1d":          nn.Conv1d,          # 1D convolution
    "conv2d":          nn.Conv2d,          # 2D convolution
    "depthwise_conv":  nn.Conv2d(groups=in_channels),  # Depthwise
    "separable_conv":  SeparableConv2d,     # Depthwise + pointwise
    "transformer_enc": TransformerEncoder,  # Self-attention + FFN
    "transformer_dec": TransformerDecoder,  # Cross-attention + self-attention
    "lstm":            nn.LSTM,             # LSTM cell
    "gru":             nn.GRU,             # GRU cell
    "mamba_block":     MambaBlock,          # State space model block
    "mlp_mixer":       MLPMixerBlock,       # Channel + spatial mixing
    "convnext_block":  ConvNeXtBlock,       # Modern conv block
    "resnet_block":    ResNetBlock,         # Residual connection
    "dense_block":     DenseBlock,          # Dense connectivity
    "attention_pool":  AttentionPooling,    # Attention-based pooling
    "cross_attention": CrossAttention,       # Cross-modal attention
}
```

### Phase 3: Architecture Template

Use pre-built patterns for common architecture families:

**CNN Backbone + Transformer Head (Hybrid Vision)**

```python
class HybridVisionModel(nn.Module):
    def __init__(self, img_size=224, patch_size=16, in_chans=3,
                 embed_dim=768, depth=12, num_heads=12):
        super().__init__()
        # Stage 1: CNN stem for efficient early processing
        self.stem = nn.Sequential(
            nn.Conv2d(in_chans, 64, kernel_size=7, stride=2, padding=3),
            nn.BatchNorm2d(64),
            nn.GELU(),
            nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(128),
            nn.GELU(),
        )
        
        # Stage 2: Patch embed + positional encoding
        self.patch_embed = nn.Conv2d(128, embed_dim, kernel_size=patch_size//4, stride=patch_size//4)
        num_patches = (img_size // patch_size) ** 2
        self.pos_embed = nn.Parameter(torch.zeros(1, num_patches, embed_dim))
        
        # Stage 3: Transformer blocks
        self.blocks = nn.ModuleList([
            TransformerBlock(embed_dim, num_heads) for _ in range(depth)
        ])
        
        # Stage 4: Head
        self.norm = nn.LayerNorm(embed_dim)
        self.head = nn.Linear(embed_dim, num_classes)
    
    def forward(self, x):
        x = self.stem(x)
        x = self.patch_embed(x)
        x = x.flatten(2).transpose(1, 2)
        x = x + self.pos_embed
        for block in self.blocks:
            x = block(x)
        x = self.norm(x).mean(dim=1)  # Global average pooling
        return self.head(x)
```

**Multi-Scale Feature Pyramid (Dense Prediction)**

```python
class FeaturePyramidNet(nn.Module):
    """Uses multiple scales with top-down pathway."""
    def __init__(self, encoder_channels=[256, 512, 1024, 2048],
                 fpn_dim=256):
        super().__init__()
        # Lateral connections (1x1 convs)
        self.laterals = nn.ModuleList([
            nn.Conv2d(c, fpn_dim, 1) for c in encoder_channels
        ])
        # Top-down pathway (upsample + sum)
        self.topdowns = nn.ModuleList([
            nn.Conv2d(fpn_dim, fpn_dim, 3, padding=1) for _ in range(len(encoder_channels)-1)
        ])
    
    def forward(self, features):
        # features: list of multi-scale feature maps [P2, P3, P4, P5]
        laterals = [l(f) for l, f in zip(self.laterals, features)]
        
        # Top-down pathway
        outs = [laterals[-1]]
        for i in range(len(laterals)-2, -1, -1):
            up = F.interpolate(outs[0], size=laterals[i].shape[-2:], mode='nearest')
            merged = laterals[i] + up
            outs.insert(0, self.topdowns[i](merged))
        return outs
```

**Mixture of Experts (Sparse MoE Layer)**

```python
class SparseMoELayer(nn.Module):
    """Sparse mixture of experts with top-k routing."""
    def __init__(self, dim, num_experts=8, top_k=2, hidden_dim=512):
        super().__init__()
        self.num_experts = num_experts
        self.top_k = top_k
        self.gate = nn.Linear(dim, num_experts)
        self.experts = nn.ModuleList([
            nn.Sequential(
                nn.Linear(dim, hidden_dim),
                nn.GELU(),
                nn.Linear(hidden_dim, dim)
            ) for _ in range(num_experts)
        ]
    
    def forward(self, x):
        # x shape: (batch, seq, dim)
        gate_logits = self.gate(x)  # (batch, seq, num_experts)
        weights, indices = torch.topk(gate_logits, self.top_k, dim=-1)
        weights = F.softmax(weights, dim=-1)
        
        # Dispatch to experts
        output = torch.zeros_like(x)
        for b in range(x.shape[0]):
            for s in range(x.shape[1]):
                for k in range(self.top_k):
                    expert_idx = indices[b, s, k]
                    output[b, s] += weights[b, s, k] * self.experts[expert_idx](x[b, s].unsqueeze(0)).squeeze(0)
        return output
```

## Design Patterns by Use Case

| Use Case | Recommended Pattern | Key Advantage |
|----------|-------------------|---------------|
| Image classification | ConvNeXt + global pooling | Simple, well-understood |
| Object detection | FPN backbone + DETR head | End-to-end, no NMS |
| Language modeling | Transformer + MoE | Scales parameters without compute |
| Time series forecasting | Mamba + temporal convolution | Efficient long-range dependencies |
| Multi-modal (V+L) | Cross-attention encoder | Flexible modality fusion |
| Graph data | GNN + attention pooling | Relational reasoning |
| Protein structure | Equivariant transformer | Physics-aware |
| Audio generation | Diffusion + U-Net | High quality, iterative refinement |
| Video | 3D Conv + temporal transformer | Spatiotemporal modeling |

## Efficiency Optimization Patterns

**Pattern 1: Efficient Attention**
```python
def linear_attention(Q, K, V):
    """O(n) attention via kernel trick instead of O(n²)."""
    Q = F.elu(Q) + 1
    K = F.elu(K) + 1
    KV = torch.einsum("bnd,bne->bde", K, V)
    K_sum = K.sum(dim=1)
    attn = (torch.einsum("bnd,bde->bne", Q, KV)) / (torch.einsum("bnd,bd->bn", Q, K_sum).unsqueeze(-1) + 1e-6)
    return attn
```

**Pattern 2: Depthwise Separable Convolution**
```python
class SeparableConv2d(nn.Module):
    """Reduces params vs regular conv by ~groups factor."""
    def __init__(self, in_c, out_c, kernel_size, padding=0):
        super().__init__()
        self.depthwise = nn.Conv2d(in_c, in_c, kernel_size, 
                                     padding=padding, groups=in_c)
        self.pointwise = nn.Conv2d(in_c, out_c, 1)
```

**Pattern 3: Weight Tying**
```python
def weight_tying(layers):
    """Share weights across all layers. Saves memory, smooths gradients."""
    shared_block = TransformerBlock(dim=512, heads=8)
    return nn.ModuleList([shared_block for _ in range(12)])
```

## Common Pitfalls

1. **No ablation studies** — adding multiple innovations at once makes it impossible to know what worked
2. **Gradient path issues** — vanishing/exploding gradients from poor skip-connection design
3. **Normalization placement** — Pre-norm vs post-norm matters; pre-norm is more stable for deep nets
4. **Initialization sensitivity** — novel blocks need custom init; use `kaiming_uniform` or `xavier` as baseline
5. **Memory blind spots** — activation memory grows linearly with depth; use checkpointing or gradient accumulation
6. **Over-engineering** — start simple, add complexity only when baseline shows room for improvement

## Verification Checklist

- [ ] Architecture designed from problem constraints, not copied
- [ ] Each building block justified by ablation or prior work
- [ ] Parameter count within budget
- [ ] Computational cost (FLOPs) profiled
- [ ] Memory usage (activations + weights) within budget
- [ ] Gradient flow verified (gradient norm histogram)
- [ ] Forward pass runs without shape errors
- [ ] Backward pass completes without NaNs
- [ ] Training dynamics stable (loss decreases reliably)
- [ ] Baseline comparison shows architecture improvement

## See Also

- neural-network-fundamentals — core neural network concepts
- transformer-architectures — transformer design patterns
- attention-mechanisms-deep — advanced attention variants
- state-space-models-mamba — SSM alternatives to attention
- custom-training-loops — training custom architectures

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.