library(DiagrammeR)
grViz(” digraph neural_net { rankdir=LR;
// Default node styling node [shape=circle, style=filled, fontname=Helvetica, fillcolor=lightgray]
// Input Layer x0 [label=‘x0\n(bias)’, fillcolor=gray90] x1 [label=‘x1’, fillcolor=gray90] x2 [label=‘x2’, fillcolor=gray90] x3 [label=‘x3’, fillcolor=gray90]
// Hidden Layer a0_1 [label=‘a0[1]\n(bias)’, fillcolor=gray80] a1_1 [label=‘a1[1]’, fillcolor=gray80] a2_1 [label=‘a2[1]’, fillcolor=gray80] a3_1 [label=‘a3[1]’, fillcolor=gray80]
// Output Layer z2 [label=‘z[2]’, fillcolor=gray70] y_hat [label=‘ŷ’, fillcolor=gray60]
// Keep layers aligned { rank = same; x0; x1; x2; x3; } { rank = same; a0_1; a1_1; a2_1; a3_1; } { rank = same; z2; y_hat; }
// Edges Input → Hidden with weights x0 -> a1_1 [label=‘w0[1]^1’] x0 -> a2_1 [label=‘w0[1]^2’] x0 -> a3_1 [label=‘w0[1]^3’]
x1 -> a1_1 [label=‘w1[1]^1’] x1 -> a2_1 [label=‘w1[1]^2’] x1 -> a3_1 [label=‘w1[1]^3’]
x2 -> a1_1 [label=‘w2[1]^1’] x2 -> a2_1 [label=‘w2[1]^2’] x2 -> a3_1 [label=‘w2[1]^3’]
x3 -> a1_1 [label=‘w3[1]^1’] x3 -> a2_1 [label=‘w3[1]^2’] x3 -> a3_1 [label=‘w3[1]^3’]
// Edges Hidden → Output with weights a0_1 -> z2 [label=‘w0[2]’] a1_1 -> z2 [label=‘w1[2]’] a2_1 -> z2 [label=‘w2[2]’] a3_1 -> z2 [label=‘w3[2]’]
// Output to prediction z2 -> y_hat } “)