Tensorflow實現DNN,手寫數字識別

2021-08-25 08:38:38 字數 2726 閱讀 6391

from tensorflow.examples

.tutorials

.mnist import input_data

mnist = input_data.read_data_sets("g:/tensorflow/data", one_hot=true)

import tensorflow as tf

learning_rate = 0.001

train_epochs = 20

batch_size = 64

要使用tensorflow, 首先要引入它,然後應該初始化乙個圖,但是tensorflow中會預設乙個圖graph,所以可以跳過。此處設定學習速率為0.001,即模型優化時,採用的梯度下降方法,以0.001的學習速率向最優點逼近。train_epochs是指訓練的輪數,每次訓練選取batch_size組資料,每輪可以訓練 mnist.train.num_examples / batch_size次。所以這是乙個隨機梯度下降(sgd)。

n_input = 784

n_hidden1 = 100

n_hidden2 = 100

n_classes = 10

n_input為輸入向量的維度,由於手寫數字是28*28的(展開即784),故輸入向量維度都是784,此處神經網路為2個隱藏層,1個輸出層,隱藏層均為100個神經元。

x = tf.placeholder(tf.float32, shape=[none, n_input])

y = tf.placeholder(tf.float32, shape=[none, n_classes])

設定兩個佔位符,x為輸入,shape中第乙個值為none代表行為不確定維度,第二個值表示有n_input列,同理得到y的設定。

weights = 

biases =

def

inference

(input_x):

layer_1 = tf.nn.relu(tf.matmul(x, weights['h1']) + biases['b1'])

layer_2 = tf.nn.relu(tf.matmul(layer_1, weights['h2']) + biases['b2'])

out_layer = tf.matmul(layer_2, weights['out']) + biases['out']

return out_layer

綜上,這部分**是定義了乙個函式,輸入向量,返回通過3層神經網路之後的輸出向量。

logits = inference(x)

prediction = tf.nn.softmax(logits)

loss = tf.reduce_mean(tf.nn

.softmax_cross_entropy_with_logits(logits=logits, labels=y))

optimizer = tf.train

.adamoptimizer(learning_rate=learning_rate)

train_op = optimizer.minimize(loss)

pre_correct = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))

accuracy = tf.reduce_mean(tf.cast(pre_correct, tf.float32))

init =tf.global_variables_initializer()
tensorflow中宣告一張圖及其內部張量節點之後,要先初始化。

with tf.session() as sess:

sess.run(init)

total_batch = int(mnist.train.num_examples / batch_size)

for epoch in range(train_epochs):

for batch in range(total_batch):

batch_x, batch_y = mnist.train.next_batch(batch_size)

sess.run(train_op, feed_dict=)

if epoch % 10 == 0:

loss_, acc = sess.run([loss, accuracy], feed_dict=)

print("epoch {}, loss , acc ".format(epoch, loss_, acc))

print("optimizer finished!")

#計算測試集的準確度

test_acc = sess.run(accuracy, feed_dict=)

print('test accuracy', test_acc)

tensorflow中,要實現計算,都是在session中進行的,且應用with結構,無需手動關閉會話。

20輪訓練完成後,計算測試集的準確率,本方法輸出結果為0.9312.

DNN語音增強實現

獲取乾淨語音及雜訊語音資料,可以使用 sou ndfi le soundfile soundf ile 中的 rea dread read 函式 處理語音資料,主要是因為雜訊和乾淨語音的長度不一致,而對乾淨語音加噪時,需要保證雜訊和乾淨語音的長度一致,以防資料處理時,陣列不一致,因此需要選取與乾淨語...

反卷積實現 tensorflow 實現

deconv解卷積,實際是叫做conv transpose,conv transpose實際是卷積的乙個逆向過程,tf中,編寫conv transpose 的時候,心中想著乙個正向的卷積過程會很有幫助。想象一下我們有乙個正向卷積 input shape 1,5,5,3 kernel shape 2,...

Tensorflow實現嶺回歸

嶺回歸可以看作是線性回歸的一種增強版,實現的時候無非就是加入乙個二範數正則化項,但是應當注意,這裡只對於權重進行懲罰,偏置項是不加入正則化的,具體理論可以參見相關的 和blog,在此不贅述。這裡還是使用tf實現了嶺回歸演算法,並實際應用在了乙個真實資料集而非人工資料集上,資料及規模相比於之前的資料也...