#include <iostream>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
// Sigmoid activation function
double sigmoid(double x) {
return 1.0 / (1.0 + exp(-x));
}
// Derivative of the sigmoid function
double sigmoidDerivative(double x) {
return x * (1.0 - x);
}
// Neural network class
class NeuralNetwork {
private:
vector<vector<double>> weights;
vector<double> biases;
vector<double> outputs;
public:
NeuralNetwork(int inputSize, int outputSize) {
// Initialize weights and biases
weights.resize(outputSize, vector<double>(inputSize));
biases.resize(outputSize);
outputs.resize(outputSize);
srand(static_cast<unsigned>(time(0))); // Seed for random number generation
for (int i = 0; i < outputSize; ++i) {
biases[i] = static_cast<double>(rand()) / RAND_MAX; // Random bias
for (int j = 0; j < inputSize; ++j) {
weights[i][j] = static_cast<double>(rand()) / RAND_MAX; // Random weight
}
}
}
// Forward propagation
void forward(const vector<double>& inputs) {
for (size_t i = 0; i < weights.size(); ++i) {
double activation = biases[i];
for (size_t j = 0; j < weights[i].size(); ++j) {
activation += weights[i][j] * inputs[j];
}
outputs[i] = sigmoid(activation);
}
}
// Print the network outputs
void printOutputs() const {
cout << "Outputs: ";
for (const double& output : outputs) {
cout << output << " ";
}
cout << endl;
}
};
int main() {
int inputSize = 3;
int outputSize = 1;
NeuralNetwork nn(inputSize, outputSize);
vector<double> inputs = {0.5, 0.3, 0.2}; // Example inputs
cout << "Running neural network simulation..." << endl;
nn.forward(inputs);
nn.printOutputs();
return 0;
}