深度学习(VGGnet)

数据集 cifar10_300.csv 是将原始的 cifar10 数据集经过处理后的数据集。该数据集一共有300张图片,包括10个类别,每个类别30张图片,数据集的最后一列为标签列。图片样例如下:
在这里插入图片描述
在这里插入图片描述

# 导入需要的包
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, MaxPooling2D, Flatten
import numpy as np
import pandas as pd
tf.reset_default_graph

# 设置随机种子
seed = 7
np.random.seed(seed)
tf.set_random_seed(seed)


# 导入训练集和测试集
cifar10_300 = pd.read_csv("cifar10_300.csv")
X = cifar10_300.values[:,:-1]
Y = cifar10_300["label"].values

# 进行数据归一化
X = X/255

# 分割训练集和测试集,
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state = 10, stratify = Y)

# 将数据集转换成网络输入需要的形状
x_train = x_train.reshape([-1, 32, 32, 3])
x_test = x_test.reshape([-1, 32, 32, 3])

print("x_train shape:", x_train.shape,"\nx_test shape:", x_test.shape)

# 将标签转换为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(filters = 64,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 input_shape=(32, 32, 3),   # 设置输入的形状
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 64,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(MaxPooling2D(pool_size=(2, 2)))

# 第二部分,卷积层+池化
model.add(Conv2D(filters = 128,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 128,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(MaxPooling2D(pool_size=(2, 2)))

# 第三部分,卷积层+池化
model.add(Conv2D(filters = 256,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 256,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 256,              # 设置卷积核的个数
                 kernel_size = (1, 1),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(MaxPooling2D(pool_size=(2, 2)))

# 第四部分,卷积层+池化
model.add(Conv2D(filters = 512,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 512,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 512,              # 设置卷积核的个数
                 kernel_size = (1, 1),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(MaxPooling2D(pool_size=(2, 2)))

# 第五部分,卷积层+池化
model.add(Conv2D(filters = 512,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 512,              # 设置卷积核的个数
                 kernel_size = (3, 3),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(Conv2D(filters = 512,              # 设置卷积核的个数
                 kernel_size = (1, 1),      # 设置卷积核的大小
                 strides=(1, 1),            # 设置卷积的步长
                 padding='same',            # 设置填充方式
                 activation='relu',         # 设置激活函数
                 kernel_initializer='uniform' #设置权重初始化方法
                ))

model.add(MaxPooling2D(pool_size=(2, 2)))

# 第六部分,全连接层
model.add(Flatten())  # 扁平化
model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))

# 输出层
model.add(Dense(10, activation='softmax'))

# 创建会话
with tf.Session() as sess:
    # 进行模型的编译
    adam = keras.optimizers.Adam(lr = 0.00001)     # 定义优化方法,使用“adam”,并设置学习率
    model.compile(loss='categorical_crossentropy', # 设置损失函数
                  optimizer=adam,                  # 设置优化方法
                  metrics=['accuracy'])            # 设置检测指标

    # 网络训练,batch大小为 64, 训练轮数为 5 轮
    model.fit(x_train, y_train, batch_size = 64, epochs = 5)

    # 模型测试,使用模型预测测试集的标签
    y_pred = model.predict_classes(x_test)
    # 模型评价,评价模型在测试集上的准确率
    test_accuracy = model.evaluate(x_test, y_test)[1]
    print('Test Accuracy:', test_accuracy)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值