Tensorflow框架写一个简单的CNN网络

本文展示了如何训练一个简单的卷积神经网络 (CNN) 来对 CIFAR 图像进行分类。

导入 TensorFlow

import tensorflow as tf

from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

下载并准备 CIFAR10 数据集

CIFAR10 数据集包含 10 类,共 60000 张彩色图片,每类图片有 6000 张。此数据集中 50000 个样例被作为训练集,剩余 10000 个样例作为测试集。类之间相互独立,不存在重叠的部分。

#从tensorflow官方数据集加载cifar10数据集
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# 归一化
train_images, test_images = train_images / 255.0, test_images / 255.0
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 11s 0us/step
170508288/170498071 [==============================] - 11s 0us/step

查看数据集

为了验证数据集看起来是否正确,我们绘制训练集中的前 25 张图像并在每张图像下方显示类名称:

class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
               'dog', 'frog', 'horse', 'ship', 'truck']

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i])
    # The CIFAR labels happen to be arrays, 
    # which is why you need the extra index
    plt.xlabel(class_names[train_labels[i][0]])
plt.show()

 

 

构造卷积神经网络模型

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

编译并训练模型 

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))
 

model.compile()函数用法

keras: model.compile ()_shuijinghua的博客-CSDN博客_model.compile

model.fit()函数用法 tensorflow中model.fit()用法_yunfeather的博客-CSDN博客_model.fit函数使用方法

评估模型

plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
plt.show()

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

 

313/313 - 1s - loss: 0.8384 - accuracy: 0.7170
print(test_acc)
0.7170000076293945

参考:关于TensorFlow | TensorFlow中文官网 (google.cn)

下篇博客将利用此CNN网络跑自己的数据集

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: 在TensorFlow中构建CNN网络的基本步骤如下: 1. 导入所需的库 ```python import tensorflow as tf from tensorflow.keras import layers, models ``` 2. 定义模型 在定义模型时,我们可以使用`Sequential`或`Functional API`来创建。以下是一个使用`Sequential`创建CNN网络的示例: ```python model = models.Sequential([ layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)), layers.MaxPooling2D((2,2)), layers.Conv2D(64, (3,3), activation='relu'), layers.MaxPooling2D((2,2)), layers.Conv2D(64, (3,3), activation='relu'), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(10) ]) ``` 首先,在输入层中我们定义了一个`Conv2D`层,该层中有32个单元,每个单元大小为3x3,激活函数使用ReLU,输入数据形状为(28,28,1)。 然后,在第一层之后,我们添加了一个最大池化层,其大小为2x2。 接着,我们又添加了两个`Conv2D`层,然后再添加一个最大池化层。 在最后一层之后,我们添加了一个扁平化层,将数据展平成一维。 最后,我们添加了两个全连接层来输出模型预测结果,其中第一个层使用ReLU激活函数,最后一层输出10个单元,用于分类10个数字。 3. 编译模型 ```python model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) ``` 我们使用Adam优化器来优化损失函数,损失函数使用交叉熵损失函数,评估标准是准确率。 4. 训练模型 ```python model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) ``` 通过训练集进行训练,epochs是指训练轮数,验证数据(测试集)用于验证模型性能。 以上就是利用TensorFlow框架进行CNN网络构建的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值