1. 创建自己的数据集,利用数字1-10 和 26个小写字母生成我们的训练数据集。
from captcha.image import ImageCaptcha import random CHAR_SET = ['1', '2', '3', '4', '5','6', '7', '8', '9', '0','a','b','c','d','e','f','g','h','i','j','k','l','m','n'] CHAR_LEN = len(CHAR_SET) CAPTCHA_LEN = 4 for i in range(CHAR_LEN): for j in range(CHAR_LEN): for k in range(CHAR_LEN): for m in range(CHAR_LEN): captcha_text = CHAR_SET[i] + CHAR_SET[j] + CHAR_SET[k] + CHAR_SET[m] image = ImageCaptcha() image.write(captcha_text, './tmp/mydata/'+ captcha_text + '.jpg')
得到的数据集样本如下图所示:
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
2. 设计网络架构,进行训练
def model(self): x = tf.reshape(self.X, shape=[-1, self.image_height, self.image_width, 1], name="input_x") print(">>> input x: {}".format(x)) # 卷积层1 wc1 = tf.get_variable(name='wc1', shape=[3, 3, 1, 32], dtype=tf.float32, initializer=tf.contrib.layers.xavier_initializer()) bc1 = tf.Variable(self.b_alpha * tf.random_normal([32]), name="bc1") conv1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x, wc1, strides=[1, 1, 1, 1], padding='SAME'), bc1), name="conv1") print("conv1.shape-----", conv1.shape) conv1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name="max_pool1") print("conv1.shape-----", conv1.shape) conv1 = tf.nn.dropout(conv1, self.keep_prob, name="dropout1") print("conv1.shape-----", conv1.shape) ''' conv1 = slim.conv2d(x, 3