学习ChatGPT原理,人工智能神经网络Python实现

import math  
import random  
   
# 神经网络3层, 1个隐藏层; 4个input和1个output  
network = [4, [16], 1]  

population = 50  
elitism = 0.2   
random_behaviour = 0.1  
mutation_rate = 0.5  
mutation_range = 2  
historic = 0  
low_historic = False  
score_sort = -1  
n_child = 1  
# 激活函数  
def sigmoid(z):  
    return 1.0/(1.0+math.exp(-z))  
# random number  
def random_clamped():  
    return random.random()*2-1  
   
# "神经元"  
class Neuron():  
    def __init__(self):  
        self.biase = 0  
        self.weights = []  
   
    def init_weights(self, n):  
        self.weights = []  
        for i in range(n):  
            self.weights.append(random_clamped())  
    def __repr__(self):  
        return 'Neuron weight size:{}  biase value:{}'.format(len(self.weights), self.biase)  
   
# 层  
class Layer():  
    def __init__(self, index):  
        self.index = index  
        self.neurons = []  
   
    def init_neurons(self, n_neuron, n_input):  
        self.neurons = []  
        for i in range(n_neuron):  
            neuron = Neuron()  
            neuron.init_weights(n_input)  
            self.neurons.append(neuron)  
   
    def __repr__(self):  
        return 'Layer ID:{}  Layer neuron size:{}'.format(self.index, len(self.neurons))  
   
# 神经网络  
class NeuroNetwork():  
    def __init__(self):  
        self.layers = []  
   
    # input:输入层神经元数 hiddens:隐藏层 output:输出层神经元数  
    def init_neuro_network(self, input, hiddens , output):  
        index = 0  
        previous_neurons = 0  
        # input  
        layer = Layer(index)  
        layer.init_neurons(input, previous_neurons)  
        previous_neurons = input  
        self.layers.append(layer)  
        index += 1  
        # hiddens  
        for i in range(len(hiddens)):  
            layer = Layer(index)  
            layer.init_neurons(hiddens[i], previous_neurons)  
            previous_neurons = hiddens[i]  
            self.layers.append(layer)  
            index += 1  
        # output  
        layer = Layer(index)  
        layer.init_neurons(output, previous_neurons)  
        self.layers.append(layer)  
   
    def get_weights(self):  
        data = { 'network':[], 'weights':[] }  
        for layer in self.layers:  
            data['network'].append(len(layer.neurons))  
            for neuron in layer.neurons:  
                for weight in neuron.weights:  
                    data['weights'].append(weight)  
        return data  
   
    def set_weights(self, data):  
        previous_neurons = 0  
        index = 0  
        index_weights = 0  
   
        self.layers = []  
        for i in data['network']:  
            layer = Layer(index)  
            layer.init_neurons(i, previous_neurons)  
            for j in range(len(layer.neurons)):  
                for k in range(len(layer.neurons[j].weights)):  
                    layer.neurons[j].weights[k] = data['weights'][index_weights]  
                    index_weights += 1  
            previous_neurons = i  
            index += 1  
            self.layers.append(layer)  
   
    def feed_forward(self, inputs):  
        for i in range(len(inputs)):  
            self.layers[0].neurons[i].biase = inputs[i]  
   
        prev_layer = self.layers[0]  
        for i in range(len(self.layers)):  
            # 第一层没有weights  
            if i == 0:  
                continue  
            for j in range(len(self.layers[i].neurons)):  
                sum = 0  
                for k in range(len(prev_layer.neurons)):  
                    sum += prev_layer.neurons[k].biase * self.layers[i].neurons[j].weights[k]  
                self.layers[i].neurons[j].biase = sigmoid(sum)  
            prev_layer = self.layers[i]  
   
        out = []  
        last_layer = self.layers[-1]  
        for i in range(len(last_layer.neurons)):  
            out.append(last_layer.neurons[i].biase)  
        return out  
   
    def print_info(self):  
        for layer in self.layers:  
            print(layer)



展开阅读全文

页面更新:2024-03-13

标签:神经网络   神经元   人工智能   函数   原理

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top