谁说神经网络不一定用随机数模块

本文介绍了一个使用Python实现的简单神经网络模型,初始化权重和偏置时利用了random库生成的随机数。通过feedforward和train方法进行前向传播和训练,并在多线程环境中加锁以确保权重更新的安全。
摘要由CSDN通过智能技术生成

import random

import threading

import math

 

class NeuralNetwork:

    def __init__(self, input_size, hidden_size, output_size):

        self.input_size = input_size

        self.hidden_size = hidden_size

        self.output_size = output_size

        

        self.weights_ih = [[random.uniform(-1, 1) for _ in range(hidden_size)] for _ in range(input_size)]

        self.weights_ho = [[random.uniform(-1, 1) for _ in range(output_size)] for _ in range(hidden_size)]

        

        self.biases_h = [random.uniform(-1, 1) for _ in range(hidden_size)]

        self.biases_o = [random.uniform(-1, 1) for _ in range(output_size)]

        

        self.lock = threading.Lock()

 

    def feedforward(self, inputs):

        hidden = [0] * self.hidden_size

        for i in range(self.input_size):

            for j in range(self.hidden_size):

                hidden[j] += inputs[i] * self.weights_ih[i][j]

        for i in range(self.hidden_size):

            hidden[i] = self.sigmoid(hidden[i])

 

        outputs = [0] * self.output_size

        for i in range(self.hidden_size):

            for j in range(self.output_size):

                outputs[j] += hidden[i] * self.weights_ho[i][j]

        for i in range(self.output_size):

            outputs[i] = self.sigmoid(outputs[i])

 

        return outputs

 

    def train(self, inputs, targets):

        outputs = self.feedforward(inputs)

        

        # 计算误差

        errors = [targets[i] - outputs[i] for i in range(self.output_size)]

        

        # 更新权重

        self.lock.acquire() # 加锁以避免多线程写操作冲突

        for i in range(self.input_size):

            for j in range(self.hidden_size):

                self.weights_ih[i][j] += errors[j] * inputs[i]

        for i in range(self.hidden_size):

            for j in range(self.output_size):

                self.weights_ho[i][j] += errors[j] * self.sigmoid_derivative(outputs[j])

        self.lock.release() # 解锁

        

    def sigmoid(self, x):

        return 1 / (1 + math.exp(-x))

 

    def sigmoid_derivative(self, x):

        return x * (1 - x)

 

# 使用示例

input_size = 2

hidden_size = 3

output_size = 1

 

neural_network = NeuralNetwork(input_size, hidden_size, output_size)

inputs = [random.uniform(0, 1) for _ in range(input_size)]

outputs = neural_network.feedforward(inputs)

 

print(outputs)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值