自制数据集告一段落后,准备先跨过猫狗分类(没找好数据集和标签),实现卷积神经网络,卷积神经网络便是CBAPD,特征提取后在使用全连接搭建神经网络(CBAPD我会单独出一章,因为怕视觉疲劳),先了解一下cifar10分类数据集用卷积神经网络实现后的效果(此顺序为我的学习顺序,也可以去中国Mooc一步步学),先来浅浅的了解下代码
#常用的六步法
第一步 #导入相关模块
import tensorflow as tf
from keras import Model
import keras.layers import Conv2D,BatchNormalization,Activation,Dense,MaxPool2D,Dropout,Flatten
#这样导入后方便使用,pycharm记忆补全
第二步 #导入数据集
cifar=tf.keras.datasets.cifar10
(x_train,y_train),(x_test,y_test)=cifar10.load_data()
第三步 #搭建神经网络
class Baseline(Model):
def __init__(self):
super(Baseline,self).__init__()
self.c1=Conv2D(filters=6,kernel_size=(5,5),padding="same")
#卷积层 对应C
self.b1=BatchNormalization()
#BN层 对应B
self.a1=Activation("relu")
#激活层 对应A
self.p1=MaxPool2D(pool_size=(2,2),strides=2,padding="same")
#池化层 对应P
self.d1=Dropout(0.2)
#舍弃层 对应D
self.flatten=Flatten()
#拉直层
self.f1=Dense(128,activation="relu")
#全连接
self.d2=Dropout(0.2)
#舍弃
self.f2=Dense(10,activation="softmax")
#全连接
def call(self,x): #传参
x=self.c1(x)
x=self.b1(x)
x=self.a1(x)
x=self.p1(x)
x=self.d1(x)
x=self.flatten(x)
x=self.f1(x)
x=self.d2(x)
y=self.f2(x)
return y
model=Baseline()
第四步 #配置神经网络训练过程
model.compile(optimizer="adam",
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=["sparse_categorical_accuracy"])
第五步 #执行神经网络训练
model.fit(x_train,y_train,batch_size=32,epochs=5,validation_data=(x_test,y_test),validation_freq=1)
第六步 #打印网络参数
model.summary()
此代码便是一个一层cifar10卷积神经网络,训练结构的准确率并不高,因为cifar10是十分类的,
需要更多卷积层,常用且有名的VGG16,准确率能达到98%左右
取自 中国大学Mooc 曹健教授
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)