程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

跟我一起玩儿转Python之机器学习神经网络算法模型实战

hfteth 2025-03-25 13:33:35 技术文章 17 ℃

AI神经网络是一种模仿生物神经网络结构和功能的计算模型,由大量节点(也称神经元)和连接线构成。每个节点接收到输入信号后,会经过加权计算和激活函数的作用,生成输出信号并传递到下一层节点,依此类推,直到到达输出层。通过学习和训练,AI神经网络可以实现对输入和输出数据之间映射关系的建立和预测。

神经网络进行建模预测通常会经历以下几个过程:

1. 问题分析:明确预测目标,选择合适的数据集,完成数据预处理。

2. 网络构建:确定网络结构,选择输入层、隐藏层和输出层中的节点数量。

3. 参数初始化:初始化网络连接权重和阈值等参数。

4. 前向传播:输入数据经过网络,从输入层到输出层进行计算和转换。

5. 损失计算:计算网络输出结果和真实值之间的损失函数。

6. 反向传播:误差从输出层向输入层回传,更新每层参数来最小化损失。

7. 模型评估:使用验证集评估模型效果,判断模型是否达到预期。

8. 迭代优化:重复训练网络,通过多轮迭代逐步提升性能,避免过拟合。

9. 模型预测:使用测试集对模型进行最终评估,部署模型进行预测。

10. 模型维护:持续优化模型,应对新数据,保证模型性能。

通俗形象理解神经网络CNN数据建模:

数据卷积池化卷积池化扁平化数据全连接训练结果

下面我们一起通过TensorFlow实现CNN,旨在通俗形象的理解TensorFlow框架CNN的工作流程和设计思想:

import numpy as np

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

#封装卷积和池化层函数

def conv2d(x, f):

return tf.layers.conv2d(inputs=x, filters=f, kernel_size=[5, 5],strides=1, padding='SAME')

def max_pool(x):

return tf.layers.max_pooling2d(inputs=x, pool_size=[2,2], strides=2, padding='SAME')

#导入MNIST数据集

mnist = input_data.read_data_sets("MNIST_data", one_hot=True)

#初始化数据

input_x = tf.placeholder(tf.float32, [None, 28*28])/255

output_y = tf.placeholder(tf.int32, [None, 10])

input_x_images = tf.reshape(input_x, [-1, 28, 28, 1])

# 数据集中选取3000个样本

test_x = mnist.test.images[:3000]

test_y = mnist.test.labels[:3000]

# 构建卷积神经网络模型

# 第1层卷积

conv1 = conv2d(input_x_images,32)

# 第 1 层池化

pool1 = max_pool(conv1)

# 第 2 层卷积

conv2 = conv2d(pool1,64)

# 第 2 层池化

pool2 = max_pool(conv2)

# 平坦化

flat = tf.reshape(pool2, [-1, 7 * 7 * 64])

#全链接层

dense = tf.layers.dense(inputs=flat, units=1024, activation=tf.nn.relu)

#丢弃层

dropout = tf.layers.dropout(inputs=dense, rate=0.5)

#全链接层

logits = tf.layers.dense(inputs=dropout, units=10)

#目标函数

loss = tf.losses.softmax_cross_entropy(onehot_labels=output_y, logits=logits)

#优化

train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

#训练数据

accuracy = tf.metrics.accuracy( labels=tf.argmax(output_y, axis=1),

predictions=tf.argmax(logits, axis=1),)[1]

with tf.Session() as sess:

# 初始化全局和局部变量

init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())

sess.run(init)

for i in range(200):

batch = mnist.train.next_batch(10)

train_loss, train_op_ = sess.run([loss, train_op],

{input_x: batch[0], output_y: batch[1]})

test_output = sess.run(logits, {input_x: test_x[:20]})

inferenced_y = np.argmax(test_output, 1)

print('预测数字:',inferenced_y)

print("真实数字:",np.argmax(test_y[:20], 1))

最近发表
标签列表