简单学习AI深度学习算法:卷积神经网络(Convolutional Neural Networks, CNN)循环神经网络(Recurrent Neural Networks,简称RNN)

继续写:https://blog.csdn.net/chenhao0568/article/details/134920391?spm=1001.2014.3001.5502
深度学习算法:

卷积神经网络(Convolutional Neural Networks, CNN)

  1. 卷积层(Convolutional Layer)

    • 想象你正在用一个放大镜观察一张照片。你不是一次看整张照片,而是一个小区域一个小区域地观察。这个放大镜就像卷积层中的“过滤器(filter)”,它在输入数据(如图像)上滑动,一次关注一小部分。
    • 每个过滤器都会提取特定类型的特征,比如边缘、角落或特定的纹理。
  2. 激活函数(Activation Function)

    • 将过滤器应用于图像后,通常会使用一个激活函数来增加网络的非线性。最常见的是ReLU(Rectified Linear Unit)。
    • 可以把激活函数想象成一个决策点,它决定了过滤器捕捉到的特征是否足够重要,需要保留在网络的下一层。
  3. 池化层(Pooling Layer)

    • 池化层的作用是减少数据的空间大小,从而减少计算量和防止过拟合。最常用的是最大池化,它从它的输入区域中选择最大值。
    • 想象你在看一张图片,但是你只能记住每个小区域里最显著的特征。这就是池化层的原理。
  4. 全连接层(Fully Connected Layer)

    • 在经过几层卷积和池化之后,网络会有全连接层,这些层可以将之前提取的所有特征结合起来,用于分类或其他任务。
    • 这就像你在看完一张图片后,根据记住的各种特征来描述或分类这张图片。

卷积神经网络通过这些层的堆叠和组合,能够从图像中有效地提取特征,用于各种任务,比如图像分类、物体检测等。

用python写个示例

让我们用Python和Keras(一个流行的深度学习库)来构建一个简单的卷积神经网络(CNN)。这个示例将构建一个用于图像分类的小型CNN。我们将使用Keras内置的MNIST数据集,它包含手写数字的灰度图像。

首先,你需要安装Keras和TensorFlow(Keras的后端)。你可以通过以下命令安装它们(如果尚未安装的话):

pip install tensorflow keras

然后,以下是构建和训练一个简单CNN的代码:

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten, MaxPooling2D

# 加载数据
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 数据预处理
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255

# 将标签转换为one-hot编码
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

# 创建模型
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten()) # 将三维特征图转换为一维
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))

# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=5)

这个示例中,我们首先加载并预处理MNIST数据集。然后,我们创建一个顺序模型并添加几层:一个卷积层,一个最大池化层,一个flatten层(将三维特征图转换为一维),接着是两个全连接层。最后,我们编译并训练模型。

请注意,这只是一个基本示例,实际应用中的CNN可能会更复杂,并且可能需要更多的调优来提高性能。

循环神经网络(Recurrent Neural Networks,简称RNN)是一种特别适合于处理序列数据的神经网络。与传统的神经网络不同,它能够处理序列中的时间动态信息。这使得RNN特别适用于语言处理、时间序列分析等领域。

为了帮助你更好地理解RNN,我们可以用一个生活中的例子来类比:想象你在看一部电影,每看到一个镜头,你的大脑不仅会处理这个镜头的信息,还会记住之前的情节来理解当前发生的事情。RNN也是这样工作的:它在处理当前的输入数据(比如一段文字中的当前单词)时,会考虑之前接收到的信息(之前的单词)。

RNN的核心是一个循环结构,这个结构使得网络能够保持对之前信息的记忆。在RNN中,网络会将上一个时刻的输出作为输入的一部分输入到下一个时刻,这样就形成了一个循环。通过这种方式,RNN可以将过去的信息传递到未来的处理步骤中。

然而,标准的RNN也有其局限性,比如难以处理长期依赖(长时间序列中早期的信息对后续的影响)问题。为了解决这个问题,研究人员发明了一些改进型的RNN,如长短时记忆网络(Long Short-Term Memory, LSTM)和门控循环单元(Gated Recurrent Unit, GRU),它们能够更好地处理这类问题。

用python写个示例

这里我会给你一个简单的循环神经网络(RNN)的示例,使用Python和Keras库。这个例子将展示如何用RNN处理一个简单的序列数据问题。假设我们有一个简单的序列数据,并且我们的任务是预测下一个数值。

首先,你需要安装Keras和TensorFlow,因为Keras是建立在TensorFlow之上的。你可以通过以下命令安装它们(如果你还没有安装的话):

pip install tensorflow keras

然后,我们可以编写一个简单的RNN模型:

  1. 导入所需的库。
  2. 创建一些序列数据。
  3. 构建RNN模型。
  4. 训练模型。
  5. 用模型进行预测。

下面是一个基本的代码示例:

import numpy as np
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense

# 创建一些简单的序列数据
# 例如,我们可以创建一个简单的递增序列
X = np.array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]])
Y = np.array([4, 5, 6, 7, 8])

# 调整X的形状以适应RNN的输入要求
X = X.reshape((X.shape[0], X.shape[1], 1))

# 构建RNN模型
model = Sequential()
model.add(SimpleRNN(50, activation='relu', input_shape=(3, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

# 训练模型
model.fit(X, Y, epochs=200, verbose=0)

# 使用模型进行预测
test_input = np.array([6, 7, 8])
test_input = test_input.reshape((1, 3, 1))
predicted = model.predict(test_input, verbose=0)

print(predicted)

这个例子中,我们构建了一个非常简单的RNN模型来预测一个递增序列中的下一个数值。请注意,这只是一个基本的示例,实际应用中的RNN模型会更加复杂,并且需要更多的数据和调整来达到好的性能。

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值