使用卷积神经网络对CIFAR10数据集进行分类。
运行平台: Linux
Python版本: Python 3.6
TensorFlow版本: 1.15.2
IDE: Colab
在上次的全连接网络的基础上对CIFAR10进行分类CIFAR10+全连接网络TensorFlow(有需要的同学可以先看这个),一些基本的部分如解压和数据集就不再介绍了。
代码
读取数据集
%tensorflow_version 1.x
import tensorflow as tf
import numpy as np
import time
import os
print(tf.__version__)
!/opt/bin/nvidia-smi
TensorFlow 1.x selected.
1.15.2
Mon May 11 13:18:03 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... Off | 00000000:00:04.0 Off | 0 |
| N/A 52C P0 31W / 250W | 0MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
# 训练数据集载入函数
def train_data_load(path):
import pickle
train_dataset = {
'train_images':[], 'train_labels':[]}
for batch_num in range(1, 6):
with open('{0}/data_batch_{1}'.format(path, batch_num), 'rb') as f:
data = pickle.load(f, encoding='bytes')
train_dataset['train_images'].append(data[b'data'])
train_dataset['train_labels'].append(data[b'labels'])
train_dataset['train_images'] = np.concatenate(train_dataset['train_images'])
train_dataset['train_labels'] = np.concatenate(train_dataset['train_labels'])
return train_dataset
# 测试数据集载入函数
def test_data_load(path):
import pickle
test_dataset = {
'test_images':[], 'test_labels':[]}
with open('{0}/test_batch'.format(path), 'rb') as f:
data = pickle.load(f, encoding='bytes')
test_dataset['test_images'] = data[b'data']
test_dataset['test_labels'] = data[b'labels']
return test_dataset
# 读入测试和训练集
train_dataset = train_data_load('/content/drive/My Drive/cifar-10-batches-py')
test_dataset = test_data_load('/content/drive/My Drive/cifar-10-batches-py')
# 将数据集reshape符合的形状
train_images = np.reshape(train_dataset['train_images'], [-1,32,32,3])
train_labels = np.array(train_dataset['train_labels'])
test_images = np.reshape(test_dataset['test_images'], [-1,32,32,3])
test_labels = np.array(test_dataset['test_labels'])
# 查看各个的形状
print(train_images.shape)
print(train_labels.shape)
print(test_images.shape)
print(test_labels.shape)