原文链接: kaggle 手写数字识别 卷积网咯
上一篇: tensorflow flowers数据集 record文件 提取图像
下一篇: 多维数据和标签一起打乱 shuffle
网址
https://www.kaggle.com/c/digit-recognizer
下载数据集
链接:https://pan.baidu.com/s/1wT49X1RgoxWf0riCywgbkQ
提取码:yc3r
预处理数据
import tensorflow as tf
import tensorflow.contrib.slim as slim
import numpy as np
import cv2 as cv
TRAIN_PATH = "D:/data/Digit Recognizer/train.csv"
TEST_PATH = "D:/data/Digit Recognizer/test.csv"
data = np.loadtxt(TRAIN_PATH, dtype=np.str, delimiter=',')
image_data = data[1:, 1:].reshape((-1, 28, 28, 1)).astype(np.uint8)
for i in range(10):
cv.namedWindow(f'img{i}', cv.WINDOW_NORMAL)
cv.namedWindow(f'bin{i}', cv.WINDOW_NORMAL)
cv.namedWindow(f'erode{i}', cv.WINDOW_NORMAL)
cv.namedWindow(f'dilate{i}', cv.WINDOW_NORMAL)
img = image_data[np.random.randint(0, 100)]
print(img.shape)
cv.imshow(f'img{i}', img)
binary = cv.threshold(img, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)[1]
cv.imshow(f'bin{i}', binary)
# 核的大小和形状
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
# 膨胀操作
dilate = cv.dilate(binary, kernel, iterations=1)
cv.imshow(f'dilate{i}', dilate)
# 腐蚀操作
erode = cv.erode(binary, kernel, iterations=1)
cv.imshow(f'erode{i}', erode)
cv.waitKey(0)
效果
对比之后还是只做二值化可能效果会好点
训练代码
注意池化层的padding默认是VALID格式
对图片数据只做了归一化