cifar10模型完整版训练代码

from tensorflow.keras.datasets import cifar10
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.datasets import cifar10
import matplotlib.pyplot as plt
import numpy as np





#---------------加载MNIST---------------#
(x_train,y_train),(x_test,y_test) = cifar10.load_data()





# 打印信息
print("训练数据集:{0}".format(x_train.shape))
print("训练数据集标签:{0}".format(y_train.shape))
print("测试数据集:{0}".format(x_test.shape))
print("测试数据集标签:{0}".format(y_test.shape))





#对图像像素值进行标准化,将其缩放至0-1之间
x_train=x_train.astype('float32')/255.0
x_test=x_test.astype('float32')/255.0
#将标签转化为one-hot编码类型
y_train=keras.utils.to_categorical(y_train)
y_test=keras.utils.to_categorical(y_test)
print(y_test[:5])





import matplotlib.pyplot as plt
import numpy as np
#可视化25张图
def  plot_image_labels_prediction(images, #图像列表
                                 labels, #标签列表
                                 idx, #从第idx个开始显示
                                 nums): #缺省一次显示10幅
    fig=plt.gcf() #调取当前图标,全称为get current figure
    fig.set_size_inches(12,14) #设置图标大小,单位为英寸,1英寸等于2.54cm
    if nums>25:
        nums=25 #最多显示25张图片
    for i in range(0,nums):
        ax=plt.subplot(5,5,1+i) #子图生成
        ax.imshow(images[idx])
        title='label'+str(np.argmax(labels[idx]))#定义title方便图像结果对应
        ax.set_title(title,fontsize=10) #设置图像title
        ax.set_xticks([]) #无x刻度
        ax.set_yticks([]) #无y刻度
        idx+=1
    plt.show()
plot_image_labels_prediction(x_train,y_train,0,25) 




#模型训练,定义模型
from keras import models, layers
def build_model():
    model = models.Sequential()
    
    # first layer
    model.add(layers.Conv2D(16, (3,3), padding='same', activation='relu', data_format='channels_last', input_shape=(32,32,3)))
    model.add(layers.Conv2D(16, (3,3), padding='same', activation='relu'))
    model.add(layers.MaxPooling2D((2,2)))
    
    # second layer
    model.add(layers.Conv2D(32, (3,3), padding='same', activation='relu'))
    model.add(layers.Conv2D(32, (3,3), padding='same', activation='relu'))
    model.add(layers.MaxPooling2D((2,2)))

    # third layer, flatten
    model.add(layers.Flatten())
    
    # fourth layer
    model.add(layers.Dense(128, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    
    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['sparse_categorical_accuracy'])
    
    return model
network = build_model()
network.summary()




#定义优化器,损失函数

optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
network.compile(loss='categorical_crossentropy', optimizer=optimizer,metrics=['acc'])
history = network.fit(x_train,y_train, epochs=5, batch_size=64, validation_split=0.2)




#可视化
# plot train history
loss = history.history['loss']
val_loss = history.history['val_loss']
acc = history.history['acc']
val_acc = history.history['val_acc']

plt.figure(figsize=(10,3))
plt.subplot(1,2,1)
plt.plot(loss, color='blue', label='train')
plt.plot(val_loss, color='red', label='test')
plt.ylabel('loss')
plt.legend()

plt.subplot(1,2,2)
plt.plot(acc, color='blue', label='train')
plt.plot(val_acc, color='red', label='test')
plt.ylabel('accuracy')
plt.legend()




#可视化25张图像
def plot_image_labels_prediction(images,labels,prediction,idx,nums=25):
    fig = plt.gcf()
    fig.set_size_inches(12, 14)
    if nums > 25: nums = 25
    for i in range(0, nums):
        ax = plt.subplot(5, 5, 1 + i)
        ax.imshow(images[idx], cmap='binary')
        title = 'label' + str(np.argmax(labels[idx]))
        if (len(prediction) > 0):
            title += 'prediction=' + str(np.argmax(labels[idx]))
        ax.set_title(title, fontsize=10)
        ax.set_xticks([])
        ax.set_xticks([])
        idx += 1
plt.show()
predict_x =network.predict(x_test)
classes_x = np.argmax(predict_x,axis=1)
prediction = classes_x
plot_image_labels_prediction(x_test,y_test,prediction,idx=340)

以上为总代码

直接复制,即可运行

模型可以替换更好更准确的,可视化也可省略

以上是模型打印输出数据

损失函数,优化器显示,这里训练了5次,想要更精确可以把epochs数值修改大一点,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值