İlk modeliniz
Çalıştırılabilir bir MLP ile açık geri yayılım.
Doğrudan uygulamadaninclude/nexus_model/containers/sequential.hpp
01Üç adımda sinir ağı#
Bu tam C++ örneği [32,784] girdisini [32,10] çıktısına taşır. GELU aktivasyon, Linear öğrenilebilir katmandır. Mekanizmayı göstermek için L=sum(y) kullanılır; sınıflandırmada gerçek kayıp gradyanını verin.
#include <nexus_model/nexus_model.hpp>#include <iostream>#include <memory>using namespace nexus_model;int main() { init::manual_seed(42); Sequential model({ std::make_shared<Linear>(784, 256), std::make_shared<GELU>(), std::make_shared<Linear>(256, 10) }); auto x = Tensor::full({32, 784}, 0.1f); model.zero_grad(); auto y = model.forward(x); // Example objective: L = sum(y). dL/dy = 1. auto dy = Tensor::full({32, 10}, 1.0f); auto dx = model.backward(dy); std::cout << y.size(0) << " x " << y.size(1) << "\n"; return dx.same_shape(x) ? 0 : 1;}02Şekilleri izleyin#
İlk Linear son ekseni 784’ten 256’ya dönüştürür; GELU korur; ikinci Linear 10 logit üretir. backward girdisi çıktı şekline tam uymalıdır. dx, x ile aynı şekildedir. Parametre gradyanları model.parameters() altındadır.
03203530 öğrenilebilir değer#
Sequential sayısal isimler kullanır: 0.weight [256,784], 0.bias [256], 2.weight [10,256], 2.bias [10]. GELU parametresizdir. Örnekte optimizer adımı yoktur; eğitim döngüsü bölümünde ağırlık güncellemesini ekleyin.
for (const auto& [name, p] : model.named_parameters()) { std::cout << name << ": " << p->data.numel() << "\n";}◆Kaynak kodla birlikte okuyun. API davranışı mevcut uygulamayı esas alır.