日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【TensorFlow-windows】学习笔记八——简化网络书写

發布時間:2023/12/13 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【TensorFlow-windows】学习笔记八——简化网络书写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

之前寫代碼的時候都要預先初始化權重,還得擔心變量是否會出現被重復定義的錯誤,但是看網上有直接用tf.layers構建網絡,很簡潔的方法。

這里主要嘗試了不預定義權重,是否能夠實現正常訓練、模型保存和調用,事實證明闊以。

驗證

訓練與模型保存

很簡潔的代碼直接五十行實現了手寫數字的網絡訓練

import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data mnist=input_data.read_data_sets("./TensorFlow-Examples-master/examples/3_NeuralNetworks/tmp",one_hot=True)steps=5000 batch_size=100 def conv_network(x):x=tf.reshape(x,[-1,28,28,1])#第一層卷積conv1=tf.layers.conv2d(inputs=x,filters=32,kernel_size=[5,5],activation=tf.nn.relu)conv1=tf.layers.max_pooling2d(conv1,pool_size=[2,2],strides=[2,2])#第二層卷積conv2=tf.layers.conv2d(inputs=conv1,filters=64,kernel_size=[3,3],activation=tf.nn.relu)conv2=tf.layers.max_pooling2d(inputs=conv2,pool_size=[2,2],strides=[2,2])#第三層卷積conv3=tf.layers.conv2d(inputs=conv2,filters=32,kernel_size=[3,3],activation=tf.nn.relu)conv3=tf.layers.max_pooling2d(inputs=conv3,pool_size=[2,2],strides=[2,2])#全連接fc1=tf.layers.flatten(conv3)fc1=tf.layers.dense(fc1,500,activation=tf.nn.relu)#輸出fc2=tf.layers.dense(fc1,10)fc2=tf.nn.softmax(fc2) #因為loss里面用了softmax_cross_enrtopy,所以此行去掉return fc2input_img=tf.placeholder(dtype=tf.float32,shape=[None,28*28],name='X') input_lab=tf.placeholder(dtype=tf.int32,shape=[None,10])#損失函數 output_lab=conv_network(input_img) logit_loss=tf.nn.softmax_cross_entropy_with_logits_v2(labels=input_lab,logits=output_lab) loss=tf.reduce_mean(tf.cast(logit_loss,tf.float32)) #可以去掉,因為softmax_cross_entroy自帶求均值 optim=tf.train.AdamOptimizer(0.001).minimize(loss) #評估函數 pred_equal=tf.equal(tf.arg_max(output_lab,1),tf.arg_max(input_lab,1)) accuracy=tf.reduce_mean(tf.cast(pred_equal,tf.float32))init=tf.global_variables_initializer() saver=tf.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_y=mnist.train.next_batch(batch_size)sess.run(optim,feed_dict={input_img:data_x,input_lab:data_y})if step%100==0 or step==1:accuracy_val=sess.run(accuracy,feed_dict={input_img:data_x,input_lab:data_y})print('step'+str(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的損失均值,因而構建網絡的時候,沒必要用最后下面兩句話:

loss=tf.reduce_mean(tf.cast(logit_loss,tf.float32)) fc2=tf.nn.softmax(fc2)

調用模型

實現單張手寫數字的識別

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import cv2 saver=tf.train.import_meta_graph('./layermodel/CNN_layer.meta') sess=tf.Session() saver.restore(sess,'./layermodel/CNN_layer') graph=tf.get_default_graph() print(graph.get_all_collection_keys()) #['pred', 'train_op', 'trainable_variables', 'variables'] print(graph.get_collection('trainable_variables')) prediction=graph.get_collection('pred') X=graph.get_tensor_by_name('X:0') #讀取圖片 image=cv2.imread('./mnist/test/2/2_2.png') image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) plt.imshow(image) plt.show() #顯示圖片 input_img=np.reshape(image,[1,28*28]) result=sess.run(prediction,feed_dict={X:input_img}) print(result) #[array([[0., 0., 1., 0., 0., 0., 0., 0., 0., 0.]], dtype=float32)]

后記

其實主要是為了后續使用tf.layers里面的其它結構比如BN做準備,因為代碼越復雜,寫起來越惡心,不如現在看看如何簡化代碼,第一步就是去除了權重的預定義,后續慢慢研究其它的。

訓練代碼:鏈接:https://pan.baidu.com/s/1gmX-YBkz4nNG3RpJ_rEBKQ 密碼:o8u2

測試代碼:鏈接:https://pan.baidu.com/s/1ME9pgyM9TNQadmzMeURlNg 密碼:5z7k

總結

以上是生活随笔為你收集整理的【TensorFlow-windows】学习笔记八——简化网络书写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。