將mnist資料集中的所有訓練資料儲存到tfrecord檔案中:
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
#生成整數型屬性 轉換型別 將輸入的value轉換成整數型
def _int64_feature(value):
return tf.train.feature(int64_list=tf.train.int64list(value=[value]))
#生成字串型別屬性 將輸入的value轉換成字串型別
def _bytes_feature(value):
return tf.train.feature(bytes_list=tf.train.byteslist(value=[value]))
# 將資料轉化為tf.train.example格式。
def _make_example(pixels, label, image):
image_raw = image.tostring() #將影象轉換成字串表示 傳給image_raw
#將乙個樣例轉換成example protocol buffer 將所有資訊寫入這個資料結構
example = tf.train.example(features=tf.train.features(feature=))
return example
# 讀取mnist訓練資料。
mnist = input_data.read_data_sets("d:/mnist_data",dtype=tf.uint8, one_hot=true)
images = mnist.train.images #訓練的
labels = mnist.train.labels #訓練對應的正確答案
pixels = images.shape[1] #訓練影象的解析度
num_examples = mnist.train.num_examples
# 輸出包含訓練資料的tfrecord檔案。
with tf.python_io.tfrecordwriter("d:/output.tfrecords") as writer:
for index in range(num_examples):
example = _make_example(pixels, labels[index], images[index])
writer.write(example.serializetostring()) #將乙個example寫入檔案
print("tfrecord訓練檔案已儲存。")
利用轉換好的tfrecord檔案作為神經網路的輸入:
import tensorflow as tf
# match_filenames_once 獲取乙個符合正規表示式的所有檔案
files = tf.train.match_filenames_once("output.tfrecords")
#通過函式 有效的管理檔案佇列 不打亂佇列
filename_queue = tf.train.string_input_producer(files,shuffle=false)
#解析tfrecord檔案資料
# 讀取檔案
reader = tf.tfrecordreader()
_,serialized_example = reader.read(filename_queue)
#解析一行讀取的資料
features = tf.parse_single_example(
serialized_example,
features = )
# 從原始影象資料解析出畫素矩陣,並根據影象尺寸還原影象
decode_images = tf.decode_raw(features['image_raw'],tf.uint8)
# 轉換影象格式
retype_images = tf.cast(decode_images,tf.float32)
images = tf.reshape(retype_images,[784])
labels = tf.cast(features['label'],tf.int32)
pixels = tf.cast(features['pixels'],tf.int32)
# 組合訓練資料
# 將檔案以100個為一組打包
min_after_dequeue = 10000 #出隊時,佇列中元素的最少個數
batch_size = 100
capacity = min_after_dequeue + 3 * batch_size #佇列的最大容量
image_batch,label_batch = tf.train.shuffle_batch([images,labels],
batch_size = batch_size,
capacity = capacity,
min_after_dequeue=min_after_dequeue)
# 訓練模型
# 定義前向傳播
def inference(input_tensor,weights1,biases1,weights2,biases2):
layer1 = tf.nn.relu(tf.matmul(input_tensor,weights1)+biases1)
return tf.matmul(layer1,weights2)+biases2
# 函式相關模型
input_node = 784
output_node = 10
layer1_node = 500
regularaztion_rate = 0.0001
training_steps = 5000
# 初始化變數
weights1 = tf.variable(tf.truncated_normal([input_node,layer1_node],stddev=0.1))
biases1 = tf.variable(tf.constant(0.1,shape=[layer1_node]))
weights2 = tf.variable(tf.truncated_normal([layer1_node,output_node],stddev=0.1))
biases2 = tf.variable(tf.constant(0.1,shape=[output_node]))
# 前向傳播結果
y = inference(image_batch,weights1,biases1,weights2,biases2)
# 計算反向傳播
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=label_batch)
cross_entropy_mean = tf.reduce_mean(cross_entropy) #交叉熵平均值
# 正則化損失函式
regularizer = tf.contrib.layers.l2_regularizer(regularaztion_rate)
regularaztion = regularizer(weights1) + regularizer(weights2)
# 損失函式
loss = cross_entropy_mean + regularaztion
# 優化損失函式
train_step = tf.train.gradientdescentoptimizer(0.01).minimize(loss)
# 初始化會話,並開始訓練過程
with tf.session() as sess:
sess.run((tf.global_variables_initializer(),tf.local_variables_initializer())) #區域性變數 全域性變數
coord = tf.train.coordinator() #協同啟動的執行緒
threads = tf.train.start_queue_runners(sess=sess,coord=coord) #啟動所有執行緒
#迴圈神經網咯
for i in range(training_steps):
if i % 1000 == 0:
print("after %d training steps,loss is %g"%(i,sess.run(loss)))
sess.run(train_step)
coord.request_stop()
coord.join(threads)
訓練結果:
TensorFlow 深度學習筆記
google 深度學習筆記 經常總結是個好習慣,筆記目錄奉上。歡迎star,有問題可以到issue區討論 官方教程位址 最近tensorflow團隊出了乙個model專案,和這個課程無關,但是可以參考 框架 tensorflow 谷歌出品的基於python的深度學習工具集 工具 ipython,py...
TensorFlow深度學習框架
tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...
深度學習 初識TensorFlow
深度學習使用場景 影象理解 語音識別 自然語言處理 機器自主 無人駕駛 深度學習,如深度神經網路 卷積神經網路和遞迴神經網路已被應用計算機視覺 語音識別 自然語言處理 音訊識別與生物資訊學等領域並取得了很好的效果。深度學習在人工智慧領域的地位 深度學習框架 google brain計畫產物 應用於a...