当前位置: 首页 > article >正文

【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必备面试-热点-热门问题精华核心总结-推荐
 往期文章大全……
在这里插入图片描述

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

更多内容,点这里❤


http://www.kler.cn/a/461699.html

相关文章:

  • 框架模块说明 #09 日志模块_01
  • 机场安全项目|基于改进 YOLOv8 的机场飞鸟实时目标检测方法
  • REMARK-LLM:用于生成大型语言模型的稳健且高效的水印框架
  • 《Vue3实战教程》34:Vue3状态管理
  • 浏览器选中文字样式
  • 直观解读 JuiceFS 的数据和元数据设计(一)
  • WebAssembly 学习笔记
  • 网络安全 | 5G网络安全:未来无线通信的风险与对策
  • OpenVPN 被 Windows 升级破坏
  • Linux命令——3.网络与用户
  • SQL常用语句(基础)大全
  • C++算法20例
  • Listwise 模型时间线梳理
  • Flask是什么?深入解析 Flask 的设计与应用实践
  • main函数
  • Kafka优势剖析-顺序写、零拷贝
  • 【C++】22___STL常用算法
  • 【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置
  • node.js之---集群(Cluster)模块
  • 最新版Chrome浏览器加载ActiveX控件之CFCA安全输入控件
  • 设置虚拟机设备的dp和pt
  • 07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)
  • DataV数据可视化
  • 【2025 Rust学习 --- 09 特型和泛型】
  • C语言:位段
  • 【2024年-6月-7日-开源社区openEuler实践记录】探索 oec - hardware:硬件适配与管理的开源利器