Mnist数据集图片格式介绍
Mnist数据集分为两部分,分别含有60000张训练图片和10000张测试图片。
每一张图片包含28*28个像素。Mnist数据集把代表一张图片的二维数据转开成一个向量,长度为28*28=784。因此在Mnist的训练数据集中mnist.train.images是一个形状为[60000, 784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点,图片里的某个像素的强度值介于0-1之间。
#vitis 量化到dpu中的例子
'''
Create & train a custom cnn model for Mnist classication
Tensorflow 2.3
Author: chao.zhang
'''
import os
# Silence TensorFlow messages
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
import tensorflow.keras as keras
import tensorflow.keras.layers as layers
from load_data import get_mnist_dataset
MODEL_DIR = './models'
FLOAT_MODEL = 'float_model.h5'
if not os.path.exists(MODEL_DIR):
os.mkdir(MODEL_DIR)
def customcnn():
# create a cnn model
inputs = keras.Input(shape=(28,28,1)) #imput 28*28节点,和输入图片相关
x = layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1))(inputs) #Conv2D的32 自己定义。可以修改,只是效果不同
x = layers.MaxPooling2D((2,2))(x)
x = layers.Conv2D(64, (3,3), activation='relu')(x) #64自己定义,多少层也自己定义
x = layers.MaxPooling2D((2,2))(x)
x = layers.Conv2D(64, (3,3), activation='relu')(x)
x = layers.Flatten()(x) #平摊层
x = layers.Dense(64, activation='relu')(x) #全连接层 fc层
outputs = layers.Dense(10, activation='softmax')(x) #输出10个神经元,预测10个数字
model = keras.Model(inputs=inputs, outputs=outputs, name='mnist_customcnn_model')
model.summary()
# Compile the model
model.compile(optimizer="rmsprop",
loss="categorical_crossentropy",
metrics=['accuracy']
)
return model
# get Mnist dataset
print("\nLoad Mnist dataset..")
(train_dataset, val_dataset, test_dataset) = get_mnist_dataset(