You can build a small convolutional neural network (CNN) with NumPy by implementing its tensor operations, forward pass, gradients, loss, and parameter updates yourself. The key is to settle the array shapes and convolution convention first, then test each operation on tiny arrays before training a complete model. This approach makes the mechanics visible; it is an educational implementation, not evidence of production speed or robustness.
What “from scratch with NumPy” means
NumPy supplies N-dimensional arrays and operations for arithmetic, indexing, reductions, and reshaping. It does not supply a ready-made multidimensional CNN layer: its numpy.convolve API computes convolution for one-dimensional sequences. A 2-D, multi-channel image layer therefore needs explicit handling of image windows, filters, padding, stride, and gradients.
A useful learning project implements those operations directly in NumPy rather than relying on a deep-learning framework to define layers or compute gradients. NumPy’s documentation describes its N-dimensional array foundation; the quickstart covers arithmetic, indexing, and shape manipulation.
Choose tensor shapes and conventions first
For a compact example, use channels-last arrays throughout. A batch of images has shape (N, H, W, C_in), where N is batch size, H and W are image height and width, and C_in is the number of input channels. Store the filters as (K_h, K_w, C_in, C_out); the convolution output then has shape (N, H_out, W_out, C_out). These are a consistent suggested convention, not a NumPy-mandated layout.
Recommended Free Tools
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Write down padding, stride, data type, and the batch axis before coding. Also specify whether the operation flips each spatial kernel, as mathematical convolution does, or uses the unflipped cross-correlation convention common in neural-network layers. Many bugs that look like bad learning are shape or convention mismatches.
Derive the output dimensions
For kernel size K_h × K_w, stride S_h × S_w, and explicit zero-padding P_h rows and P_w columns on each side, the output dimensions are:
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
H_out = floor((H + 2P_h - K_h) / S_h) + 1W_out = floor((W + 2P_w - K_w) / S_w) + 1
For valid padding, set both padding values to zero. Assert that each numerator is nonnegative and divisible as expected by your chosen output rule; do not silently reshape an output with the wrong dimensions.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteRank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Implement the forward pass in small pieces
1. Extract and check image windows
Begin with one image and one channel. For each output position, select the corresponding K_h × K_w window, advancing by the chosen stride. Test valid and padded cases with a tiny hand-checkable array. Confirm the first, last, and any boundary windows before adding batches or multiple channels.
Once window indexing is correct, extend each window across all input channels. The window shape should be (K_h, K_w, C_in). Keep the implementation explicit at first; clarity is more valuable than clever indexing while validating the dimensions.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
2. Apply filters and biases
At each output location, multiply the window elementwise by each filter and sum over its height, width, and input-channel axes. The result is one value per output filter. Add a bias vector of shape (C_out,) to the output channels.
NumPy’s * performs elementwise multiplication, not matrix multiplication. Dense layers require matrix multiplication instead. Bias addition is a natural use of broadcasting: a vector of shape (C_out,) can be added across the batch and spatial axes when those dimensions align. NumPy’s broadcasting guide explains compatible shapes and cautions that some broadcasted operations can be inefficient in memory. Avoid explicitly copying a bias across every output location.
Free tools Windows power users keep installed
One-click scans. No signup required.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
3. Add activation and pooling
Pass the convolution output through an activation such as ReLU, defined elementwise as max(0, x). If adding max pooling, specify the window size and stride, and decide how incomplete boundary windows are handled. Test equal-value ties as well: a backward pass needs a consistent rule for assigning the gradient when multiple entries share a maximum.
4. Flatten and classify
Reshape the final feature tensor into a two-dimensional batch matrix, then pass it through a dense layer. Track the feature count explicitly: for flattened features F and K classes, use weights shaped (F, K) and biases shaped (K,). Use a numerically stable loss and state its assumptions, including how labels are represented. NumPy provides the needed array arithmetic and shape operations, but these layer and loss semantics are choices your implementation must define.
Implement backpropagation and verify gradients
Backpropagation applies the chain rule in reverse through each operation. For a convolution layer, calculate gradients for the filters, biases, and input; then propagate through the activation, pooling, flattening, and dense classifier. Sum or average gradients over the batch according to the loss reduction you chose, and keep that convention consistent in the parameter update.
Do not trust a gradient merely because training loss changes. On a tiny input and a few parameters, compare each analytical gradient with a finite-difference estimate. For parameter value θ, estimate its loss derivative as (L(θ + ε) - L(θ - ε)) / (2ε) using a small perturbation ε. Check convolution weights, biases, and input gradients independently, and investigate large disagreements before running a full training loop.
Build the project in a testable order
- Fix conventions. Record tensor layouts, filter layout, padding, stride, data type, batch axis, and whether kernels are flipped. Put those choices in names or docstrings.
- Test window indexing. Use tiny arrays with known values, checking output dimensions and boundaries for both valid and padded operations.
- Test the convolution forward pass. Start with one input channel and one filter; add channels, filters, and batches only after the small case matches hand calculations.
- Add activation and pooling. Check their forward outputs, boundary behavior, and max-pool tie handling.
- Add the dense layer and loss. Verify flattening dimensions, label handling, and the loss on simple examples.
- Implement backward passes. Check local gradients with finite differences before connecting the full network.
- Run a training loop and report its setup. Document preprocessing, initialization, training/test split, and evaluation choices so readers can judge what the demonstration does—and does not—show.
Common implementation mistakes
- Using
numpy.convolveas an image layer: it handles one-dimensional sequences, not batched, multi-channel image tensors. - Mixing layouts: a channels-first tensor and channels-last filter indexing can produce shape errors or incorrect calculations. Choose one layout and keep it consistent.
- Confusing elementwise and matrix multiplication: use elementwise products for window/filter accumulation and matrix multiplication for dense layers.
- Ignoring broadcast dimensions: check which axes are expanded when adding biases or combining values; a compatible shape can still be the wrong semantic shape.
- Skipping numerical checks: a plausible output or falling training loss does not prove the backward pass is correct.
- Overstating what a toy model demonstrates: a small NumPy implementation helps explain mechanics; without controlled comparisons, it does not establish speed, device support, or generalization.
When a NumPy CNN is the right choice
Use this project to understand how windows, filters, activations, and gradients fit together, or to inspect a small model operation by operation. A framework comparison should consider transparency, speed and memory on the same task, hardware support, and the operators and tooling available. No performance or accuracy comparison follows from the NumPy documentation cited here, so avoid assuming that a transparent educational implementation is competitive with framework implementations.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

