資源簡介
基于卷積神經網絡的食物圖像識別,提供數據集下載,使用python、TensorFlow等等。
代碼片段和文件信息
from?tensorflow.examples.tutorials.mnist?import?input_data
import?tensorflow?as?tf
#加載數據集
mnist?=?input_data.read_data_sets(‘MNIST_data‘?one_hot=True)
#以交互式方式啟動session
#如果不使用交互式session,則在啟動session前必須
#?構建整個計算圖,才能啟動該計算圖
sess?=?tf.InteractiveSession()
“““構建計算圖“““
#通過占位符來為輸入圖像和目標輸出類別創建節點
#shape參數是可選的,有了它tensorflow可以自動捕獲維度不一致導致的錯誤
x?=?tf.placeholder(“float“?shape=[None?784])?#原始輸入
y_?=?tf.placeholder(“float“?shape=[None?10])?#目標值
#為了不在建立模型的時候反復做初始化操作,
#?我們定義兩個函數用于初始化
def?weight_variable(shape):
????#截尾正態分布stddev是正態分布的標準偏差
????initial?=?tf.truncated_normal(shape=shape?stddev=0.1)
????return?tf.Variable(initial)
def?bias_variable(shape):
????initial?=?tf.constant(0.1?shape=shape)
????return?tf.Variable(initial)
#卷積核池化步長為10邊距
def?conv2d(x?W):
????return?tf.nn.conv2d(x?W?strides=[1?1?1?1]?padding=‘SAME‘)
def?max_pool_2x2(x):
????return?tf.nn.max_pool(x?ksize=[1?2?2?1]
??????????????????????????strides=[1?2?2?1]?padding=‘SAME‘)
“““第一層卷積“““
#由一個卷積和一個最大池化組成。濾波器5x5中算出32個特征,是因為使用32個濾波器進行卷積
#卷積的權重張量形狀是[5?5?1?32]1是輸入通道的個數,32是輸出通道個數
W_conv1?=?weight_variable([5?5?1?32])
#每一個輸出通道都有一個偏置量
b_conv1?=?bias_variable([32])
#位了使用卷積,必須將輸入轉換成4維向量,2、3維表示圖片的寬、高
#最后一維表示圖片的顏色通道(因為是灰度圖像所以通道數維1,RGB圖像通道數為3)
x_image?=?tf.reshape(x?[-1?28?28?1])
#第一層的卷積結果使用Relu作為激活函數
h_conv1?=?tf.nn.relu(conv2d(x_image?W_conv1))
#第一層卷積后的池化結果
h_pool1?=?max_pool_2x2(h_conv1)
“““第二層卷積“““
W_conv2?=?weight_variable([5?5?32?64])
b_conv2?=?bias_variable([64])
h_conv2?=?tf.nn.relu(conv2d(h_pool1?W_conv2)?+?b_conv2)
h_pool2?=?max_pool_2x2(h_conv2)
“““全連接層“““
#圖片尺寸減小到7*7,加入一個有1024個神經元的全連接層
W_fc1?=?weight_variable([7*7*64?1024])
b_fc1?=?bias_variable([1024])
#將最后的池化層輸出張量reshape成一維向量
h_pool2_flat?=?tf.reshape(h_pool2?[-1?7*7*64])
#全連接層的輸出
h_fc1?=?tf.nn.relu(tf.matmul(h_pool2_flat?W_fc1)?+?b_fc1)
“““使用Dropout減少過擬合“““
#使用placeholder占位符來表示神經元的輸出在dropout中保持不變的概率
#在訓練的過程中啟用dropout,在測試過程中關閉dropout
keep_prob?=?tf.placeholder(“float“)
h_fc1_drop?=?tf.nn.dropout(h_fc1?keep_prob)
“““輸出層“““
W_fc2?=?weight_variable([1024?10])
b_fc2?=?bias_variable([10])
#模型預測輸出
y_conv?=?tf.nn.softmax(tf.matmul(h_fc1_drop?W_fc2)?+?b_fc2)
#交叉熵損失
cross_entropy?=?-tf.reduce_sum(y_?*?tf.log(y_conv))
#模型訓練使用AdamOptimizer來做梯度最速下降
train_step?=?tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
#正確預測得到True或False的List
correct_prediction?=?tf.equal(tf.argmax(y_?1)?tf.argmax(y_conv?1))
#將布爾值轉化成浮點數,取平均值作為精確度
accuracy?=?tf.reduce_mean(tf.cast(correct_prediction?“float“))
#在session中先初始化變量才能在session中調用
sess.run(tf.initialize_all_variables())
#迭代優化模型
for?i?in?range(20000):
????#每次取50個樣本進行訓練
????batch?=?mnist.train.next_batch(50)
????if?i%100?==?0:
????????train_accuracy?=?accuracy.eval(feed_dict={
????????????x:?batch[0]?y_:batch[1]?keep_prob:1.0})?#模型中間不使用dropout
????????print(“step?%d?training?accuracy?%g“?%?(i?train_accuracy))
????train_step.run(feed_dict={x:batch[0]?y_:batch[1]
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\.idea\
?????文件?????????464??2019-05-03?13:39??Dish_CNN\.idea\Dish_CNN.iml
?????文件?????????298??2019-05-03?14:38??Dish_CNN\.idea\misc.xm
?????文件?????????275??2019-05-03?13:39??Dish_CNN\.idea\modules.xm
?????文件???????28473??2019-06-03?17:40??Dish_CNN\.idea\workspace.xm
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_mnist\
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_mnist\.pytest_cache\
?????文件??????????37??2019-05-03?14:36??Dish_CNN\test_mnist\.pytest_cache\.gitignore
?????文件?????????194??2019-05-03?14:36??Dish_CNN\test_mnist\.pytest_cache\CACHEDIR.TAG
?????文件?????????303??2019-05-03?14:36??Dish_CNN\test_mnist\.pytest_cache\README.md
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_mnist\.pytest_cache\v\
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_mnist\.pytest_cache\v\cache\
?????文件???????????2??2019-05-03?14:52??Dish_CNN\test_mnist\.pytest_cache\v\cache\nodeids
?????文件???????????2??2019-05-03?14:52??Dish_CNN\test_mnist\.pytest_cache\v\cache\stepwise
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_mnist\MNIST_data\
?????文件????????1590??2019-05-03?15:01??Dish_CNN\test_mnist\MNIST_data\convolutional.py
?????文件?????????335??2019-05-03?14:58??Dish_CNN\test_mnist\MNIST_data\input_data.py
?????文件????????1625??2019-05-03?15:00??Dish_CNN\test_mnist\MNIST_data\model.py
?????文件?????9912422??2019-05-03?14:49??Dish_CNN\test_mnist\MNIST_data\train-images-idx3-ubyte.gz
?????文件????????4210??2019-05-03?14:41??Dish_CNN\test_mnist\test1.py
?????文件???????12709??2019-05-03?14:36??Dish_CNN\test_mnist\__init__.py
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_two\
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_two\.pytest_cache\
?????文件??????????37??2019-05-03?18:33??Dish_CNN\test_two\.pytest_cache\.gitignore
?????文件?????????194??2019-05-03?18:33??Dish_CNN\test_two\.pytest_cache\CACHEDIR.TAG
?????文件?????????303??2019-05-03?18:33??Dish_CNN\test_two\.pytest_cache\README.md
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_two\.pytest_cache\v\
?????目錄???????????0??2019-06-04?13:33??Dish_CNN\test_two\.pytest_cache\v\cache\
?????文件???????????2??2019-05-03?18:51??Dish_CNN\test_two\.pytest_cache\v\cache\lastfailed
?????文件???????????2??2019-05-03?18:51??Dish_CNN\test_two\.pytest_cache\v\cache\nodeids
............此處省略13個文件信息
評論
共有 條評論