【JAVA】神经网络的基本结构和前向传播算法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,

忍不住分享一下给大家。点击跳转到网站

学习总结

1、掌握 JAVA入门到进阶知识(持续写作中......)

2、学会Oracle数据库入门到入土用法(创作中......)

3、手把手教你开发炫酷的vbs脚本制作(完善中......)

4、牛逼哄哄的 IDEA编程利器技巧(编写中......)

5、面经吐血整理的 面试技巧(更新中......)

markdown

简单的神经网络示例(Java)

在这个示例中,我们将创建一个简单的神经网络,用于理解神经网络的基本结构和前向传播算法。我们将使用Java来实现一个基本的两层神经网络(一个输入层,一个隐藏层,一个输出层)。

1. 准备工作

首先,确保你已经安装了Java开发环境(JDK)。我们将使用标准的Java库来实现这个示例,不需要额外的依赖。

2. 定义神经网络类

我们将定义一个简单的神经网络类,包含输入层、隐藏层和输出层的基本结构。为了简单起见,我们将使用随机初始化权重和偏置,并且使用Sigmoid激活函数。

2.1 定义神经网络类

public class SimpleNeuralNetwork {

private double[][] weightsInputHidden;

private double[] biasHidden;

private double[][] weightsHiddenOutput;

private double biasOutput;

public SimpleNeuralNetwork(int inputSize, int hiddenSize, int outputSize) {
    // 随机初始化权重和偏置
    weightsInputHidden = new double[inputSize][hiddenSize];
    for (int i = 0; i < inputSize; i++) {
        for (int j = 0; j < hiddenSize; j++) {
            weightsInputHidden[i][j] = Math.random();
        }
    }
    biasHidden = new double[hiddenSize];
    for (int i = 0; i < hiddenSize; i++) {
        biasHidden[i] = Math.random();
    }
    
    weightsHiddenOutput = new double[hiddenSize][outputSize];
    for (int i = 0; i < hiddenSize; i++) {
        for (int j = 0; j < outputSize; j++) {
            weightsHiddenOutput[i][j] = Math.random();
        }
    }
    biasOutput = Math.random();
}

// Sigmoid激活函数
private double sigmoid(double x) {
    return 1 / (1 + Math.exp(-x));
}

// 前向传播
public double[] forward(double[] inputs) {
    double[] hiddenLayerOutputs = new double[weightsInputHidden[0].length];
    for (int i = 0; i < hiddenLayerOutputs.length; i++) {
        double sum = biasHidden[i];
        for (int j = 0; j < inputs.length; j++) {
            sum += inputs[j] * weightsInputHidden[j][i];
        }
        hiddenLayerOutputs[i] = sigmoid(sum);
    }

    double[] outputLayerOutputs = new double[weightsHiddenOutput[0].length];
    for (int i = 0; i < outputLayerOutputs.length; i++) {
        double sum = biasOutput;
        for (int j = 0; j < hiddenLayerOutputs.length; j++) {
            sum += hiddenLayerOutputs[j] * weightsHiddenOutput[j][i];
        }
        outputLayerOutputs[i] = sigmoid(sum);
    }

    return outputLayerOutputs;
}

public static void main(String[] args) {
    // 示例:输入层有2个神经元,隐藏层有2个神经元,输出层有1个神经元
    SimpleNeuralNetwork nn = new SimpleNeuralNetwork(2, 2, 1);

    // 示例输入
    double[] input = {0.5, 0.3};

    // 前向传播
    double[] output = nn.forward(input);

    // 输出结果
    System.out.println("Output: " + output[0]);
}

往期文章

 第一章:日常_JAVA_面试题集(含答案)
 第二章:日常_JAVA_面试题集(含答案)

平安壹钱包JAVA面试官:请你说一下Mybatis的实现原理

Java必备面试-热点-热门问题精华核心总结-推荐
 往期文章大全......

一键三连 ~一键三连~ 一键三连~

更多内容,点这里❤

相关推荐
小万编程20 分钟前
【2025最新计算机毕业设计】基于SSM的医院挂号住院系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】
java·spring boot·毕业设计·计算机毕业设计·项目源码·毕设源码·java毕业设计
白宇横流学长21 分钟前
基于Java的银行排号系统的设计与实现【源码+文档+部署讲解】
java·开发语言·数据库
123yhy传奇21 分钟前
【学习总结|DAY027】JAVA操作数据库
java·数据库·spring boot·学习·mybatis
想要打 Acm 的小周同学呀26 分钟前
亚信科技Java后端外包一面
java·求职·java后端
Lulsj2 小时前
代码随想录day22 | leetcode 39.组合总和 40.组合总和II 131.分割回文串
算法·leetcode
lishiming03084 小时前
TestEngine with ID ‘junit-jupiter‘ failed to discover tests 解决方法
java·junit·intellij-idea
HEU_firejef4 小时前
设计模式——工厂模式
java·开发语言·设计模式
Kobebryant-Manba4 小时前
单元测试学习2.0+修改私有属性
java·单元测试·log4j
fajianchen4 小时前
应用架构模式
java·开发语言
Code成立5 小时前
《Java核心技术 卷II》流的创建
java·开发语言·流编程