[Day 32] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI中的神經網絡技術

神經網絡(Neural Networks)是人工智能(AI)領域的一個重要分支,靈感來自於生物神經系統。本文將深入探討神經網絡的基本概念、結構、工作原理及其在AI中的應用,並通過Python代碼詳細解釋如何構建和訓練一個簡單的神經網絡模型。

1. 神經網絡的基本概念

神經網絡由大量的神經元(Neurons)組成,這些神經元以層的形式排列。每個神經元接收來自其他神經元的輸入,經過處理後生成輸出,並將其傳遞給下一層的神經元。這些層通常分為三類:

  1. 輸入層(Input Layer):接收外部數據。
  2. 隱藏層(Hidden Layers):進行特徵提取和數據轉換。
  3. 輸出層(Output Layer):生成最終的預測結果。

2. 神經網絡的結構

一個典型的神經網絡結構如下圖所示:

Input Layer  ->  Hidden Layer(s)  ->  Output Layer

每個神經元與前一層的所有神經元相連,並通過權重(Weights)進行數據傳遞和處理。

3. 神經網絡的工作原理

神經網絡的核心在於其學習過程,這包括前向傳播(Forward Propagation)和反向傳播(Backward Propagation)。

前向傳播

在前向傳播過程中,輸入數據依次通過每一層的神經元進行處理,最終生成預測結果。數學上,這個過程可以表示為:

y = f ( W \cdot x + b )

其中:

  • y 是輸出。
  • x 是輸入數據。
  • W 是權重矩陣。
  • b 是偏置(Bias)。
  • f 是激活函數(Activation Function)。
反向傳播

反向傳播是神經網絡的學習過程,它通過計算損失函數(Loss Function)的梯度來調整權重和偏置,使得預測結果更加準確。

4. 神經網絡的應用

神經網絡在各個領域中都有廣泛的應用,包括圖像識別、語音識別、自然語言處理等。

5. 構建和訓練神經網絡

接下來,我們將通過Python代碼構建和訓練一個簡單的神經網絡模型,並對每段代碼進行詳細解釋。

環境準備

首先,我們需要安裝必要的Python庫。這裡我們使用TensorFlow和Keras來構建和訓練神經網絡。

# 安裝TensorFlow和Keras
!pip install tensorflow
加載數據集

我們將使用MNIST數據集,它是一個手寫數字識別的經典數據集。Keras內置了這個數據集,可以很方便地加載。

import tensorflow as tf
from tensorflow.keras.datasets import mnist# 加載MNIST數據集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 重新調整數據形狀並進行歸一化
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32') / 255
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32') / 255# 將標籤進行one-hot編碼
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)
構建神經網絡模型

我們將構建一個簡單的卷積神經網絡(CNN)模型,包含以下層:

  1. 卷積層(Conv2D):進行特徵提取。
  2. 池化層(MaxPooling2D):進行特徵選擇和降維。
  3. 全連接層(Dense):進行分類。
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Densemodel = Sequential()# 第一個卷積層,使用32個3x3的卷積核,激活函數為ReLU
    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))# 最大池化層,池化窗口大小為2x2
    model.add(MaxPooling2D(pool_size=(2, 2)))# 第二個卷積層,使用64個3x3的卷積核,激活函數為ReLU
    model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))# 最大池化層,池化窗口大小為2x2
    model.add(MaxPooling2D(pool_size=(2, 2)))# 將多維輸出轉化為一維
    model.add(Flatten())# 全連接層,包含128個神經元,激活函數為ReLU
    model.add(Dense(128, activation='relu'))# 輸出層,包含10個神經元(對應10個類別),激活函數為softmax
    model.add(Dense(10, activation='softmax'))# 編譯模型,使用Adam優化器和交叉熵損失函數
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    
    訓練模型

    接下來,我們將模型訓練30個epoch,並使用測試數據集評估模型性能。

    # 訓練模型
    model.fit(x_train, y_train, batch_size=128, epochs=30, validation_data=(x_test, y_test))# 評估模型
    test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
    print(f'測試損失:{test_loss}')
    print(f'測試準確率:{test_acc}')
    

    代碼解釋

    加載數據集

    在這部分代碼中,我們使用Keras提供的MNIST數據集,它包含60,000張訓練圖像和10,000張測試圖像。每張圖像是28x28像素的灰度圖。

    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    

    我們需要將數據形狀進行調整,因為卷積層期望輸入數據具有4個維度:批次大小(Batch Size)、高度、寬度和通道數(Channel)。同時,我們將像素值歸一化到[0, 1]範圍。

    x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32') / 255
    x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32') / 255
    

    標籤需要進行one-hot編碼,這樣每個標籤將轉換為一個長度為10的二元向量,其中只有一個位置為1,其餘為0。

    y_train = tf.keras.utils.to_categorical(y_train, 10)
    y_test = tf.keras.utils.to_categorical(y_test, 10)
    
    構建模型

    我們使用Keras的Sequential模型來構建神經網絡。Sequential模型允許我們按順序添加每一層。

    首先,我們添加第一個卷積層。該層包含32個3x3的卷積核,使用ReLU激活函數,輸入形狀為28x28x1(灰度圖)。

    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
    

    然後,我們添加一個最大池化層,池化窗口大小為2x2。

    model.add(MaxPooling2D(pool_size=(2, 2)))
    

    接下來,我們添加第二個卷積層,該層包含64個3x3的卷積核,使用ReLU激活函數。

    model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
    

    再添加一個最大池化層,池化窗口大小為2x2。

    model.add(MaxPooling2D(pool_size=(2, 2)))
    

    然後,我們將多維輸出轉化為一維,以便於後續的全連接層處理。

    model.add(Flatten())
    

    我們添加一個全連接層,該層包含128個神經元,使用ReLU激活函數。

    model.add(Dense(128, activation='relu'))
    

    最後,我們添加輸出層,該層包含10個神經元(對應10個類別),使用softmax激活函數。

    model.add(Dense(10, activation='softmax'))
    

    我們使用Adam優化器和交叉熵損失函數編譯模型。

    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    
    訓練和評估模型

    我們訓練模型30個epoch,每批次包含128張圖像,並使用測試數據集進行驗證。

    model.fit(x_train, y_train, batch_size=128, epochs=30, validation_data=(x_test, y_test))
    

    最後,我們使用測試數據集評估模型的損失和準確率。

    test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
    print(f'測試損失:{test_loss}')
    print(f'測試準確率:{test_acc}')
    

    總結

    本文詳細介紹了神經網絡的基本概念、結構、工作原理及其在AI中的應用,並通過Python代碼展示了如何構建和訓練一個簡單的卷積神經網絡模型。希望通過本文的介紹,讀者能夠對神經網絡有一個更加深入的了解,並能夠在實際項目中應用這些知識。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS Web组件(二)

1. HarmonyOS Web组件 官方文档 1.1. 混合开发的背景和好处 混合开发(Hybrid Development)是一种结合原生应用和Web应用的开发模式,旨在同时利用两者的优势。随着移动应用需求的多样化和复杂化,单一的开发方式往往难以满足所有…

sass版本更新,不推荐使用嵌套规则后的声明

目前在 Sass 中不推荐使用嵌套规则后的声明,在 为了通知用户即将进行的更改,并给他们时间进行更改 与之兼容的样式表。在未来的版本中,Dart Sass 将更改为 匹配纯 CSS 嵌套生成的顺序。Deprecation Warning: Sasss behavior for declarations…

Pytorch学习笔记【B站:小土堆】

文章目录 1 基础环境配置(CPU版)2 PyTorch学习2.1 Dataset和DataLoader2.1.1 Dataset2.1.2 DataLoader 2.2 Tensorboardadd_scalaradd_imageadd_graph 2.3 Transforms2.3.1 ToTensor2.3.2 Normalize2.3.3 Resize2.3.4 Compose 2.4 torchvision中的数据集…

pnpm build打包时占内溢出

这两天在打包H5网页的时候失败,总是提示下方错误 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 严重错误:堆限制附近标记压缩无效分配失败 - JavaScript 堆内存不足 尝试了多种方法&…

Linux源码安装的Redis如何配置systemd管理并设置开机启动

文章目录 实验前提实验 实验前提 已完成源码安装并能正常启动redis /usr/local/bin/redis-server能正常启动redis 实验 vim /etc/systemd/system/redis.service内容如下: [unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/…

【Blockly图形化积木编程二次开发学习笔记】5.自动保存与恢复

文章目录 引用使用 引用 <script src"./blockly/appengine/storage.js"></script>使用 <script>window.setTimeout(BlocklyStorage.restoreBlocks, 0); // 从本地存储中恢复块BlocklyStorage.backupOnUnload(); // 用户离开页面时自动将块备份到…

降雨量预测 | Matlab基于ARIMA-RBF降雨量预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 降雨量预测 | Matlab基于ARIMA-RBF降雨量预测 注&#xff1a;程序和数据放在一个文件夹。 程序语言为matlab&#xff0c;程序可出预测效果图&#xff0c;指标图; 代码特点&#xff1a;参数化编程、参数可方便更改、代…

web前端学习笔记Day02

web学习Day02 一、页面布局 盒子模型 盒子将页面的所有标签都包含在了一个矩形区域content(内容区域)->padding(内边距区域)->border(边框区域)->margin(外边距区域) div标签: 一行只能显示一个&#xff08;独占一行&#xff09;width默认为父元素宽度&#xff0c…

Docker核心技术:Docker原理之Namespace

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Docker核心技术 系列文章&#xff1a;Docker原理之Namespace&#xff0c;其他文章快捷链接如下&#xff1a; 应用架构演进容器技术要解决哪些问题Docker的基本使用Docker是如何实现的 Docker核心技术&#xff1…

多模态AI:概念、用例、优势、挑战及发展未来

多模态实际上是在尝试复制人类的感知方式&#xff1a;我们将视觉、声音和触觉等感官输入结合起来&#xff0c;形成对现实的更细致入微的感知&#xff0c;并利用这些数据来做出决定或采取行动。多模态模式也在尝试做同样的事情。 多模态AI的应用范围正在不断扩大&#xff0c;那么…

使用 useLazyAsyncData 提升数据加载体验

title: 使用 useLazyAsyncData 提升数据加载体验 date: 2024/7/19 updated: 2024/7/19 author: cmdragon excerpt: 摘要&#xff1a;本文介绍useLazyAsyncData函数在Nuxt 3中的使用&#xff0c;以提升数据加载体验。此函数支持异步获取数据并在组件中处理挂起与错误状态&…

IOCTLance:一款针对x64 WDM驱动程序的漏洞检测工具

关于IOCTLance IOCTLance是一款针对x64 WDM驱动程序的漏洞检测工具&#xff0c;该工具来源于CODE BLUE 2023上展示的一个名为“使用符号执行和污点分析增强 WDM 驱动程序漏洞检测 ”的项目。该工具能够有效增强检测Windows驱动程序模型&#xff08;WDM&#xff09;驱动程序中各…

Redis之List列表

目录 一.列表讲解 二.列表命令 三.内部编码 四.应用场景 Redis的学习专栏&#xff1a;http://t.csdnimg.cn/a8cvV 一.列表讲解 列表类型是用来存储多个有序的字符串&#xff0c;如下所示&#xff0c;a、b、c、d、e五个元素从左到右组成了一个有序的列表&#xff0c;列表中的…

微软史诗级的蓝屏

本周经历了微软的蓝屏&#xff0c;一直到周末还在加班处理公司的问题。 个人终端受到的影响较大&#xff0c;服务器上也受到了影响。因为蓝屏的事情导致不少麻烦&#xff0c;据同事说因为蓝屏的问题&#xff0c;MGH 的手术安排也受到了影响。 目前我们也在着手处理有部署 Wind…

基于SpringBoot+Vue的网吧管理系统(带1w+文档)

基于SpringBootVue的网吧管理系统(带1w文档) 基于SpringBootVue的网吧管理系统(带1w文档) 网吧管理系统&#xff0c;为了随时随地查看网吧管理信息提供了便捷的方法&#xff0c;更重要的是大大的简化了管理员管理网吧的方式方法&#xff0c;更提供了其他想要了解网吧管理信息及…

【云原生】Prometheus 服务自动发现使用详解

目录 一、前言 二、Prometheus常规服务监控使用现状​​​​​​​ 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…

SQL39道常见题型

SQL1 查询所有列 现在运营想要查看用户信息表中所有的数据&#xff0c;请你取出相应结果。 select * from user_profile 结果&#xff1a; SQL2 查询多列 还是上面那个输入&#xff0c;题目换成&#xff1a;现在运营同学想要用户的设备id对应的性别、年龄和学校的数据&#…

Springboot同时支持http和https访问

springboot默认是http的 一、支持https访问 需要生成证书&#xff0c;并配置到项目中。 1、证书 如果公司提供&#xff0c;则直接使用公司提供的证书&#xff1b; 如果公司没有提供&#xff0c;也可自己使用Java自带的命令keytool来生成&#xff1a; &#xff08;1&#x…

Flink History Server配置

目录 问题复现 History Server配置 HADOOP_CLASSPATH配置 History Server配置 问题修复 启动flink集群 启动Histroty Server 问题复现 在bigdata111上执行如下命令开启socket&#xff1a; nc -lk 9999 如图&#xff1a; 在bigdata111上执行如下命令运行flink应用程序 …

手动构建线性回归(PyTorch)

import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt import random #1.构建数据 #构建数据集 def create_dataset():x,y,coefmake_regression(n_samples100,n_features1,random_state0,noise10,coefTrue,bias14.5)#将构建数据转换为张…