兰州网站seo诊断,代理公司注册,助贷获客系统,seo推广服务前言
之前写代码的时候都要预先初始化权重#xff0c;还得担心变量是否会出现被重复定义的错误#xff0c;但是看网上有直接用tf.layers构建网络#xff0c;很简洁的方法。
这里主要尝试了不预定义权重#xff0c;是否能够实现正常训练、模型保存和调用#xff0c;事实证…前言
之前写代码的时候都要预先初始化权重还得担心变量是否会出现被重复定义的错误但是看网上有直接用tf.layers构建网络很简洁的方法。
这里主要尝试了不预定义权重是否能够实现正常训练、模型保存和调用事实证明阔以。
验证
训练与模型保存
很简洁的代码直接五十行实现了手写数字的网络训练
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data
mnistinput_data.read_data_sets(./TensorFlow-Examples-master/examples/3_NeuralNetworks/tmp,one_hotTrue)steps5000
batch_size100
def conv_network(x):xtf.reshape(x,[-1,28,28,1])#第一层卷积conv1tf.layers.conv2d(inputsx,filters32,kernel_size[5,5],activationtf.nn.relu)conv1tf.layers.max_pooling2d(conv1,pool_size[2,2],strides[2,2])#第二层卷积conv2tf.layers.conv2d(inputsconv1,filters64,kernel_size[3,3],activationtf.nn.relu)conv2tf.layers.max_pooling2d(inputsconv2,pool_size[2,2],strides[2,2])#第三层卷积conv3tf.layers.conv2d(inputsconv2,filters32,kernel_size[3,3],activationtf.nn.relu)conv3tf.layers.max_pooling2d(inputsconv3,pool_size[2,2],strides[2,2])#全连接fc1tf.layers.flatten(conv3)fc1tf.layers.dense(fc1,500,activationtf.nn.relu)#输出fc2tf.layers.dense(fc1,10)fc2tf.nn.softmax(fc2) #因为loss里面用了softmax_cross_enrtopy所以此行去掉return fc2input_imgtf.placeholder(dtypetf.float32,shape[None,28*28],nameX)
input_labtf.placeholder(dtypetf.int32,shape[None,10])#损失函数
output_labconv_network(input_img)
logit_losstf.nn.softmax_cross_entropy_with_logits_v2(labelsinput_lab,logitsoutput_lab)
losstf.reduce_mean(tf.cast(logit_loss,tf.float32)) #可以去掉因为softmax_cross_entroy自带求均值
optimtf.train.AdamOptimizer(0.001).minimize(loss)
#评估函数
pred_equaltf.equal(tf.arg_max(output_lab,1),tf.arg_max(input_lab,1))
accuracytf.reduce_mean(tf.cast(pred_equal,tf.float32))inittf.global_variables_initializer()
savertf.train.Saver()
tf.add_to_collection(pred,output_lab)
with tf.Session() as sess:sess.run(init)for step in range(steps):data_x,data_ymnist.train.next_batch(batch_size)sess.run(optim,feed_dict{input_img:data_x,input_lab:data_y})if step%1000 or step1:accuracy_valsess.run(accuracy,feed_dict{input_img:data_x,input_lab:data_y})print(stepstr(step) ,loss {:.4f}.format(accuracy_val))print(training finished!!)saver.save(sess,./layermodel/CNN_layer)【更新日志】 2019-9-2 学艺不精上面由于损失函数用的softmax_cross_entropy_with_logits_v2所以输出会被归一化得分也是一个batch的损失均值因而构建网络的时候没必要用最后下面两句话
losstf.reduce_mean(tf.cast(logit_loss,tf.float32))fc2tf.nn.softmax(fc2)调用模型
实现单张手写数字的识别
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import cv2
savertf.train.import_meta_graph(./layermodel/CNN_layer.meta)
sesstf.Session()
saver.restore(sess,./layermodel/CNN_layer)
graphtf.get_default_graph()
print(graph.get_all_collection_keys())
#[pred, train_op, trainable_variables, variables]
print(graph.get_collection(trainable_variables))
predictiongraph.get_collection(pred)
Xgraph.get_tensor_by_name(X:0)
#读取图片
imagecv2.imread(./mnist/test/2/2_2.png)
imagecv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
plt.imshow(image)
plt.show()
#显示图片
input_imgnp.reshape(image,[1,28*28])
resultsess.run(prediction,feed_dict{X:input_img})
print(result)
#[array([[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]], dtypefloat32)]后记
其实主要是为了后续使用tf.layers里面的其它结构比如BN做准备因为代码越复杂写起来越恶心不如现在看看如何简化代码第一步就是去除了权重的预定义后续慢慢研究其它的。
训练代码链接https://pan.baidu.com/s/1gmX-YBkz4nNG3RpJ_rEBKQ 密码o8u2
测试代码链接https://pan.baidu.com/s/1ME9pgyM9TNQadmzMeURlNg 密码5z7k