library(ggplot2)
# Define node positions
input_layer <- data.frame(x = rep(1, 6), y = seq(1, 6)) # 6 input units
hidden_layer1 <- data.frame(x = rep(2, 4), y = seq(1.5, 4.5, length.out = 4)) # 4 units in the first hidden layer
hidden_layer2 <- data.frame(x = rep(3, 3), y = seq(2, 4, length.out = 3)) # 3 units in the second hidden layer
output_layer <- data.frame(x = rep(4, 1), y = 3) # 1 output unit
# Combine layers into one data frame
nodes <- rbind(
cbind(input_layer, layer = "Input"),
cbind(hidden_layer1, layer = "Hidden1"),
cbind(hidden_layer2, layer = "Hidden2"),
cbind(output_layer, layer = "Output")
)
# Define connections (edges)
# From input to first hidden layer
edges_input_hidden1 <- data.frame(
x_start = rep(1, 6 * 4), y_start = rep(input_layer$y, each = 4),
x_end = rep(2, 6 * 4), y_end = rep(hidden_layer1$y, times = 6)
)
# From first hidden layer to second hidden layer
edges_hidden1_hidden2 <- data.frame(
x_start = rep(2, 4 * 3), y_start = rep(hidden_layer1$y, each = 3),
x_end = rep(3, 4 * 3), y_end = rep(hidden_layer2$y, times = 4)
)
# From second hidden layer to output layer
edges_hidden2_output <- data.frame(
x_start = rep(3, 3), y_start = hidden_layer2$y,
x_end = rep(4, 3), y_end = rep(output_layer$y, times = 3)
)
# Combine edges
edges <- rbind(edges_input_hidden1, edges_hidden1_hidden2, edges_hidden2_output)
# Plot using ggplot
ggplot() +
geom_point(data = nodes, aes(x = x, y = y, color = layer), size = 3) +
geom_segment(data = edges, aes(x = x_start, y = y_start, xend = x_end, yend = y_end),
alpha = 0.2, color = "grey") +
scale_color_manual(values = c("Input" = "blue", "Hidden1" = "green", "Hidden2" = "orange", "Output" = "red")) +
labs(title = "Neural Network Diagram") +
theme_minimal() +
theme(
legend.title = element_blank(),
legend.position = "bottom",
panel.grid = element_blank(), # Remove grid lines
axis.text = element_blank(), # Remove axis text (numbers)
axis.title = element_blank(), # Remove axis titles
axis.ticks = element_blank() # Remove axis ticks
)