admin管理员组文章数量:1035885
深度学习 —— TensorFlow与卷积神经网络(识别船舶)
友友们,早上好呀。今天我们来继续充电,本次我们来了解下卷积神经网络。然后用使用TensorFlow实现神经网络构建,并且应用到识别船舶图片上。ok话不多说,直接开始吧。
先了解几个概念
1.卷积神经网络简单了解
简单来说它就是深度学习中一类专门用于处理具有网格结构数据(如图像)的神经网络。它们通过卷积层、池化层和全连接层等结构,能够高效地提取图像中的局部特征和空间层次关系。卷积神经网络(CNN)的核心在于其卷积操作,该操作通过滑动窗口的方式,在输入数据上应用多个卷积核(也称为滤波器),从而提取出不同的特征图。
关键组成:
卷积层(Convolutional Layer):卷积层是CNN的核心,它通过卷积操作对输入数据进行特征提取。每个卷积核都可以看作是一个特征检测器,能够学习到输入数据中的某种模式或特征。
池化层(Pooling Layer):池化层通常位于卷积层之后,用于对特征图进行下采样,以减少数据的维度和计算量,同时保留重要的特征信息。常用的池化操作有最大池化和平均池化。
全连接层(Fully Connected Layer):全连接层位于CNN的末尾,用于对提取的特征进行组合和分类。在全连接层中,每个神经元都与前一层的所有神经元相连,通过权重和偏置参数进行线性变换和非线性激活。
2.应用到船舶识别示例
数据准备:
首先为了训练CNN模型,我们需要一个标记好的数据集。在这个示例中,我们需要提前准备有一个包含船舶和非船舶图像的公开数据集,并将其分为训练集和测试集。
分别放到下面文件中
train/
-ships/(包含船舶图像)
-non_ships/(包含非船舶图像)
test/
-ships/
-non_ships/
接下来处理一下数据:
数据预处理:
- 加载和标签编码:加载图像数据,并为每张图像分配一个标签(比如船舶为1,非船舶为0)。
- 图像调整:将图像大小调整为固定尺寸(例如,64x64),以适应CNN的输入要求。
- 归一化:将图像像素值归一化到[0, 1]范围。
- 数据增强:为了增加数据的多样性,可以应用一些数据增强技术,如旋转、缩放和翻转。
构建CNN模型:
下面进行模型构建:
这里我使用的TensorFlow和Keras框架
代码语言:txt复制import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2, # 随机缩放
horizontal_flip=True, # 随机水平翻转
)
test_datagen = ImageDataGenerator(rescale=1./255)
# 训练数据生成器
train_generator = train_datagen.flow_from_directory(
'pa_dataset/train', #这里用自己电脑的路径
target_size=(64, 64), # 图像大小
batch_size=32,
class_mode='binary' # 二分类任务
)
test_generator = test_datagen.flow_from_directory(
'pa_dataset/test',
target_size=(64, 64),
batch_size=32,
class_mode='binary'
)
# 构建CNN模型
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)),
MaxPooling2D(pool_size=(2, 2)),
Dropout(0.25), # Dropout层用于减少过拟合
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Dropout(0.25),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid')
])
# 编译模型
modelpile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 训练模型
model.fit(train_generator,
steps_per_epoch=train_generator.samples // train_generator.batch_size,
validation_data=test_generator,
validation_steps=test_generator.samples // test_generator.batch_size,
epochs=10)
注意一下船舶数据集要具有代表性,最好包含各种船舶类型和非船舶场景。我们可以使用Dropout层、数据增强和正则化技术来减少过拟合。
最后我们可以对模型进行测试然后进行调整。
深度学习 —— TensorFlow与卷积神经网络(识别船舶)
友友们,早上好呀。今天我们来继续充电,本次我们来了解下卷积神经网络。然后用使用TensorFlow实现神经网络构建,并且应用到识别船舶图片上。ok话不多说,直接开始吧。
先了解几个概念
1.卷积神经网络简单了解
简单来说它就是深度学习中一类专门用于处理具有网格结构数据(如图像)的神经网络。它们通过卷积层、池化层和全连接层等结构,能够高效地提取图像中的局部特征和空间层次关系。卷积神经网络(CNN)的核心在于其卷积操作,该操作通过滑动窗口的方式,在输入数据上应用多个卷积核(也称为滤波器),从而提取出不同的特征图。
关键组成:
卷积层(Convolutional Layer):卷积层是CNN的核心,它通过卷积操作对输入数据进行特征提取。每个卷积核都可以看作是一个特征检测器,能够学习到输入数据中的某种模式或特征。
池化层(Pooling Layer):池化层通常位于卷积层之后,用于对特征图进行下采样,以减少数据的维度和计算量,同时保留重要的特征信息。常用的池化操作有最大池化和平均池化。
全连接层(Fully Connected Layer):全连接层位于CNN的末尾,用于对提取的特征进行组合和分类。在全连接层中,每个神经元都与前一层的所有神经元相连,通过权重和偏置参数进行线性变换和非线性激活。
2.应用到船舶识别示例
数据准备:
首先为了训练CNN模型,我们需要一个标记好的数据集。在这个示例中,我们需要提前准备有一个包含船舶和非船舶图像的公开数据集,并将其分为训练集和测试集。
分别放到下面文件中
train/
-ships/(包含船舶图像)
-non_ships/(包含非船舶图像)
test/
-ships/
-non_ships/
接下来处理一下数据:
数据预处理:
- 加载和标签编码:加载图像数据,并为每张图像分配一个标签(比如船舶为1,非船舶为0)。
- 图像调整:将图像大小调整为固定尺寸(例如,64x64),以适应CNN的输入要求。
- 归一化:将图像像素值归一化到[0, 1]范围。
- 数据增强:为了增加数据的多样性,可以应用一些数据增强技术,如旋转、缩放和翻转。
构建CNN模型:
下面进行模型构建:
这里我使用的TensorFlow和Keras框架
代码语言:txt复制import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2, # 随机缩放
horizontal_flip=True, # 随机水平翻转
)
test_datagen = ImageDataGenerator(rescale=1./255)
# 训练数据生成器
train_generator = train_datagen.flow_from_directory(
'pa_dataset/train', #这里用自己电脑的路径
target_size=(64, 64), # 图像大小
batch_size=32,
class_mode='binary' # 二分类任务
)
test_generator = test_datagen.flow_from_directory(
'pa_dataset/test',
target_size=(64, 64),
batch_size=32,
class_mode='binary'
)
# 构建CNN模型
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)),
MaxPooling2D(pool_size=(2, 2)),
Dropout(0.25), # Dropout层用于减少过拟合
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Dropout(0.25),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid')
])
# 编译模型
modelpile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 训练模型
model.fit(train_generator,
steps_per_epoch=train_generator.samples // train_generator.batch_size,
validation_data=test_generator,
validation_steps=test_generator.samples // test_generator.batch_size,
epochs=10)
注意一下船舶数据集要具有代表性,最好包含各种船舶类型和非船舶场景。我们可以使用Dropout层、数据增强和正则化技术来减少过拟合。
最后我们可以对模型进行测试然后进行调整。
本文标签: 深度学习TensorFlow与卷积神经网络(识别船舶)
版权声明:本文标题:深度学习 —— TensorFlow与卷积神经网络(识别船舶) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748214799a2270428.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论