欢迎访问宙启技术站
智能推送

Python实现神经网络:CreateNet()函数详细介绍

发布时间:2023-12-27 22:31:28

CreateNet()函数是一个用于创建神经网络的函数。它的主要功能是定义神经网络的结构(即输入层、隐藏层和输出层之间的层数和每层的神经元数量)、设置神经网络的训练参数(如学习率和迭代次数)并初始化网络的权重和偏置。

下面是一个示例的CreateNet()函数及其使用例子:

import numpy as np

def sigmoid(x):
    # sigmoid激活函数
    return 1 / (1 + np.exp(-x))

def CreateNet(input_size, hidden_layers, output_size):
    # 定义神经网络的结构和训练参数
    network = []
    num_layers = len(hidden_layers) + 2  # 输入层、隐藏层和输出层的总层数

    # 初始化权重和偏置
    for i in range(num_layers - 1):
        layer = {
            'weights': np.random.randn(hidden_layers[i], input_size) / np.sqrt(input_size),
            'bias': np.zeros((hidden_layers[i], 1))
        }
        network.append(layer)
        input_size = hidden_layers[i]
    
    # 输出层的权重和偏置
    network.append({
        'weights': np.random.randn(output_size, hidden_layers[-1]) / np.sqrt(hidden_layers[-1]),
        'bias': np.zeros((output_size, 1))
    })
    
    return network

# 使用例子
input_size = 2
hidden_layers = [4, 3]
output_size = 1

network = CreateNet(input_size, hidden_layers, output_size)
print(network)

在以上例子中,我们使用CreateNet()函数创建了一个包含2个输入神经元、一个隐藏层(含有4个神经元)和1个输出神经元的神经网络。函数的输入参数分别是输入层的大小(input_size),每个隐藏层的神经元数量(hidden_layers)和输出层的大小(output_size)。

函数内部首先初始化了一个空列表network,用于存储每一层的权重和偏置。然后使用一个循环依次初始化每一层的权重和偏置,并将其存储在network列表中。权重的初始化使用了高斯分布,并将其缩放到输入大小(input_size)的倒数的平方根。最后,输出层的权重和偏置也被初始化,并存储在network列表的末尾。

最后,我们使用了一个简单的示例,将input_size、hidden_layers和output_size传递给CreateNet()函数,并打印得到的网络结构。运行以上代码将输出类似如下的结果:

[{'weights': array([[ 0.23799033, -0.63802086]]), 'bias': array([[0.],
       [0.],
       [0.],
       [0.]])}, {'weights': array([[-0.64241832,  0.61834644,  0.04325284,  0.78495318],
       [ 0.94380693, -1.19068983,  0.99096111, -1.1337833 ],
       [ 0.49465796, -1.98586049,  1.22616906, -0.03243426]]), 'bias': array([[0.],
       [0.],
       [0.]])}, {'weights': array([[ 0.23801709, -0.40739628,  0.72210697]]), 'bias': array([[0.]])}]

以上结果表示我们成功创建了一个包含2个输入神经元、一个隐藏层(含有4个神经元)和1个输出神经元的神经网络,并输出了网络的结构信息。

总结起来,CreateNet()函数用于创建神经网络,并可以根据输入的参数动态地定义网络的结构和训练参数,从而方便地创建不同规模和结构的神经网络。