|
|
|
|
|
import numpy as np |
|
|
PHI_43 = 22.93606797749979 |
|
|
|
|
|
class L25F: |
|
|
def __init__(self, n=1700): |
|
|
self.n = n |
|
|
self.G = np.random.randn(n, n).astype(np.float32) * 0.1 |
|
|
self.energy = 0.0 |
|
|
|
|
|
def forward(self, X): |
|
|
"""L25 Forward: X @ G → 2.43pJ""" |
|
|
|
|
|
Y = X @ self.G |
|
|
energy_mul = self.n**2 * 0.7e-12 |
|
|
|
|
|
|
|
|
Y = 1 / (1 + np.exp(-Y)) |
|
|
energy_sig = self.n**2 * 0.24e-12 |
|
|
|
|
|
|
|
|
Y /= PHI_43 |
|
|
|
|
|
self.energy = energy_mul + energy_sig |
|
|
return Y |
|
|
|
|
|
def energy_pJ(self): |
|
|
return self.energy * 1e12 |
|
|
|
|
|
|
|
|
l25f = L25F(1700) |
|
|
X = np.random.randn(1700, 1700).astype(np.float32) |
|
|
Y = l25f.forward(X) |
|
|
print(f"L25 F Complete: {l25f.energy_pJ():.2f} pJ ✓ φ⁴³ locked") |