пример нейронной сеи без доп модулей
Прекрасно! Вот пример простой нейронной сети без использования дополнительных модулей в среде Node.js:
```javascript
// Генерируем случайные обучающие данные
const trainingData = Array.from({ length: 100 }, () => ({
input: [Math.random(), Math.random()],
output: [Math.random()]
}));
// Создаем функцию активации (например, сигмоида)
function sigmoid(x) {
return 1 / (1 + Math.exp(-x));
}
// Создаем нейронную сеть
function NeuralNetwork(input, hidden, output) {
this.input = input;
this.hidden = hidden;
this.output = output;
this.weightsIH = new Array(this.hidden).fill(0).map(() => new Array(this.input).fill(Math.random()));
this.weightsHO = new Array(this.output).fill(0).map(() => new Array(this.hidden).fill(Math.random()));
this.train = function(data, iterations) {
for (let i = 0; i < iterations; i++) {
for (let j = 0; j < data.length; j++) {
// Прямое распространение
const input = data[j].input;
const target = data[j].output;
const hiddenInputs = this.weightsIH.map(row => row.map((val, idx) => val * input[idx]).reduce((a, b) => a + b));
const hiddenOutputs = hiddenInputs.map(sigmoid);
const finalInputs = this.weightsHO.map(row => row.map((val, idx) => val * hiddenOutputs[idx]).reduce((a, b) => a + b));
const finalOutputs = finalInputs.map(sigmoid);
// Обратное распространение
const outputErrors = finalOutputs.map((val, idx) => val * (1 - val) * (target[idx] - val));
const hiddenErrors = hiddenOutputs.map((val, idx) => val * (1 - val) * this.weightsHO.map(row => row[idx] * outputErrors.reduce((a, b, idx2) => a + b * finalOutputs[idx2], 0)).reduce((a, b) => a + b));
// Обновление весов
this.weightsHO = this.weightsHO.map((row, idx) => row.map((val, idx2) => val + 0.1 * outputErrors[idx] * hiddenOutputs[idx2]));
this.weightsIH = this.weightsIH.map((row, idx) => row.map((val, idx2) => val + 0.1 * hiddenErrors[idx] * input[idx2]));
}
}
}
this.run = function(input) {
const hiddenInputs = this.weightsIH.map(row => row.map((val, idx) => val * input[idx]).reduce((a, b) => a + b));
const hiddenOutputs = hiddenInputs.map(sigmoid);
const finalInputs = this.weightsHO.map(row => row.map((val, idx) => val * hiddenOutputs[idx]).reduce((a, b) => a + b));
const finalOutputs = finalInputs.map(sigmoid);
// Создаем и обучаем нейронную сеть
const neuralNetwork = new NeuralNetwork(2, 5, 1);
neuralNetwork.train(trainingData, 1000);
// Используем нейронную сеть
const input = [0.5, 0.3];
const output = neuralNetwork.run(input);
console.log(output);
```
Этот пример использует простую нейронную сеть с одним скрытым слоем и функцию активации сигмоида для обучения на случайных данных. Надеюсь, это поможет вам понять основы обучения нейронных сетей без использования дополнительных модулей.