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

Python深度学习实战-基于tensorflow原生代码搭建BP神经网络实现分类任务(附源码和实现效果)

实现功能

前面两篇文章分别介绍了两种搭建神经网络模型的方法,一种是基于tensorflow的keras框架,另一种是继承父类自定义class类,本篇文章将编写原生代码搭建BP神经网络。

实现代码

import tensorflow as tf
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 设置超参数
learning_rate = 0.001
num_epochs = 100
batch_size = 32# 定义输入和输出的维度
input_dim = X.shape[1]
output_dim = len(set(y))# 定义权重和偏置项
W1 = tf.Variable(tf.random.normal(shape=(input_dim, 64), dtype=tf.float64))
b1 = tf.Variable(tf.zeros(shape=(64,), dtype=tf.float64))
W2 = tf.Variable(tf.random.normal(shape=(64, 64), dtype=tf.float64))
b2 = tf.Variable(tf.zeros(shape=(64,), dtype=tf.float64))
W3 = tf.Variable(tf.random.normal(shape=(64, output_dim), dtype=tf.float64))
b3 = tf.Variable(tf.zeros(shape=(output_dim,), dtype=tf.float64))# 定义前向传播函数
def forward_pass(X):X = tf.cast(X, tf.float64)h1 = tf.nn.relu(tf.matmul(X, W1) + b1)h2 = tf.nn.relu(tf.matmul(h1, W2) + b2)logits = tf.matmul(h2, W3) + b3return logits# 定义损失函数
def loss_fn(logits, labels):return tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits))# 定义优化器
optimizer = tf.optimizers.Adam(learning_rate)# 定义准确率指标
accuracy_metric = tf.metrics.SparseCategoricalAccuracy()# 定义训练步骤
def train_step(inputs, labels):with tf.GradientTape() as tape:logits = forward_pass(inputs)loss_value = loss_fn(logits, labels)gradients = tape.gradient(loss_value, [W1, b1, W2, b2, W3, b3])optimizer.apply_gradients(zip(gradients, [W1, b1, W2, b2, W3, b3]))accuracy_metric(labels, logits)return loss_value# 进行训练
for epoch in range(num_epochs):epoch_loss = 0.0accuracy_metric.reset_states()for batch_start in range(0, len(X_train), batch_size):batch_end = batch_start + batch_sizebatch_X = X_train[batch_start:batch_end]batch_y = y_train[batch_start:batch_end]loss = train_step(batch_X, batch_y)epoch_loss += losstrain_loss = epoch_loss / (len(X_train) // batch_size)train_accuracy = accuracy_metric.result()print(f"Epoch {epoch+1}/{num_epochs}, Loss: {train_loss:.4f}, Accuracy: {train_accuracy:.4f}")# 进行评估
logits = forward_pass(X_test)
test_loss = loss_fn(logits, y_test)
test_accuracy = accuracy_metric(y_test, logits)print(f"Test Loss: {test_loss:.4f}, Test Accuracy: {test_accuracy:.4f}")

实现效果

本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据挖掘相关科研工作,对数据挖掘有一定认知和理解,会结合自身科研实践经历不定期分享关于python、机器学习、深度学习基础知识与案例。

致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。

邀请三个朋友关注V订阅号:数据杂坛,即可在后台联系我获取相关数据集和源码,送有关数据分析、数据挖掘、机器学习、深度学习相关的电子书籍。

http://www.lryc.cn/news/207627.html

相关文章:

  • PDF 文档处理:使用 Java 对比 PDF 找出内容差异
  • 压敏电阻有哪些原理?|深圳比创达电子EMC
  • 【计算机网络笔记】Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
  • IDEA 2023.2.2 使用 Scala 编译报错 No scalac found to compile scala sources
  • C51--PWN-舵机控制
  • electron27+react18集成搭建跨平台应用|electron窗口多开
  • 【k8s】kubeadm安装k8s集群
  • 三、虚拟机的迁移和删除
  • RabbitMQ的交换机(原理及代码实现)
  • 【C++进阶】pair容器
  • Linux--进程等待
  • VMware CentOS 虚拟机扩容
  • CentOS 编译安装 nginx
  • 学习笔记-MongoDB(命令增删改查,聚合,权限管理,索引,java使用)
  • 第13期 | GPTSecurity周报
  • OpenCV学习(一)——图像读取
  • 并发编程- 线程池ForkJoinPool工作原理分析(实践)
  • 小程序原生开发中的onLoad和onShow
  • springcloud技术栈以及相关组件
  • An Early Evaluation of GPT-4V(ision)
  • Vue在移动端实现图片的手指缩放
  • Failed to prepare the device for development
  • PPT文档图片设计素材资源下载站模板源码/织梦内核(带用户中心+VIP充值系统+安装教程)
  • 万能鼠标设置 SteerMouse v5.6.8
  • 16 用于NOMA IoT网络上行链路安全速率最大化的HAP和UAV协作框架
  • 【C++】STL容器——vector类的使用指南(含代码演示)(11)
  • elementui 修改 el_table 表格颜色,表格下方多了一条线问题
  • 阿里云/腾讯云国际站代理:阿里云服务器介绍
  • Go学习第十章——文件操作,Json和测试
  • 学习不同概率分布(二项分布、泊松分布等)概念及基础语法