资源描述:
《tensorflow实现卷积神经网络经典案例--识别手写数字》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、yotensorflow实现卷积神经网络经典案例--识别手写数字importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimportmatplotlib.cmascm%matplotlibinlineimporttensorflowastf#参数设置learning_rate=1e-4training_iterations=2000dropout=0.5batch_size=50#所有的训练样本分批训练的效率最高,每一批的训练样本数量就是batchvalidation_size=2000imag
2、e_to_display=10数据准备:data=pd.read_csv('.../train.csv')images=data.iloc[:,1:].valuesimages=images.astype(np.float)#对训练数据进行归一化处理,[0:255]=>[0.0:1.0]images=np.multiply(images,1.0/255.0)#print('images({0[0]},{0[1]})'.format(images.shape))可以查看数据格式,输出结果为'data(42000,784)'image_size=images.
3、shape[1]image_width=image_height=np.ceil(np.sqrt(image_size)).astype(np.uint8)#定义显示图片的函数defdisplay(img):#从784=>28*28one_img=img.reshape(image_width,image_height)plt.axis('off')plt.imshow(one_img,cmap=cm.binary)display(images[10])#显示数据表格中第十条数据代表的数字,结果如下图labels_flat=data.iloc[:,0].v
4、alues.ravel()labels_count=np.unique(labels_flat).shape[0]#定义one-hot编码函数defdense_to_one_hot(labels_dense,num_classes):num_labels=labels_dense.shape[0]index_offset=np.arange(num_labels)*num_classeslabels_one_hot=np.zeros((num_labels,num_classes))labels_one_hot.flat[index_offset+labe
5、ls_dense.ravel()]=1returnlabels_one_hotlabels=dense_to_one_hot(labels_flat,labels_count)labels=labels.astype(np.uint8)#print(labels[10])的输出结果为'[0000000010]',代表数据集中第10个数字的实际值为'8'#将数据拆分成用于训练和验证两部分validation_images=images[:validation_size]#将训练的数据分为train和validation,validation的部分是为了对比不
6、同模型参数的训练效果,如:learning_rate,training_iterations,dropoutvalidation_labels=labels[:validation_size]train_images=images[validation_size:]train_labels=labels[validation_size:]定义权重、偏差、卷积图层、池化图层:#定义weightdefweight_variable(shape):initial=tf.truncated_normal(shape,stddev=0.1)returntf.Vari
7、able(initial)#定义biasdefbias_variable(shape):initial=tf.constant(0.1,shape=shape)returntf.Variable(initial)#定义二维的卷积图层defconv2d(x,W):returntf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')#定义池化图层defmax_pool_2x2(x):returntf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SA
8、ME')权重weight和偏置bias其实可以写成python的输