訓練神經網路解決而分類問題

2022-08-17 14:45:21 字數 1942 閱讀 4005

#導入庫

import tensorflow as tf

from numpy.random import randomstate

#定義訓練資料batch的大小

batch_size = 8

#定義神經網路的引數

w1 = tf.variable(tf.random_normal([2,3],stddev=1,seed=1))

w2 = tf.variable(tf.random_normal([3,1],stddev=1,seed=1))

#在shape的乙個緯度上使用none可以方便使用不大的batch大小。在訓練時需要把資料分成比較小的batch,但是在測試時,可以一次性

#使用全部的資料。當書記比較小時這樣比較方便測試,但資料比較大時,將大量資料放入乙個batch可能會導致記憶體溢位。

x = tf.placeholder(tf.float32,shape=(none,2),name='x-input')

y_ = tf.placeholder(tf.float32,shape=(none,1),name='y-input')

#定義神經網路的前向傳播的過程。

a = tf.matmul(x,w1)

y = tf.matmul(a,w2)

#定義損失函式和反向傳播的演算法。

cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))

train_step = tf.train.adamoptimizer(0.001).minimize(cross_entropy)

#隨機生成乙個資料模擬集。

rdm = randomstate(1)

dataset_size = 128

x = rdm.rand(dataset_size,2)

#定義規則來給出樣本的標籤。在這裡所有的x1+x2<1的樣例被認為是正樣本,而定義其他為負樣本。和tensorflow遊樂場中的表示法不大一樣的地方是,

#在這裡使用0來表示負樣本,1表示正樣本。大部分解決分類的神經網路都會採用0和1的表示方法

y = [[int(x1+x2<1)] for (x1,x2) in x]

#建立乙個會話來執行tensorflow程式 。

with tf.session() as sess:

#初始化變數,在這個版本中,以前的initialize——all_variables()函式被取消了,取而代之的是global——variables——initializer()

init_op = tf.global_variables_initializer()

sess.run(init_op)

print(sess.run(w1))

print(sess.run(w2))

#設定訓練的輪數。

steps = 5000

for i in range(steps):

#每次選取batch——size個樣本進行訓練。

start = (i*batch_size)%dataset_size

end = min(start+batch_size,dataset_size)

#通過選取的樣本訓練神經網路並更新引數。

sess.run(train_step,feed_dict=)

if i % 1000 == 0:

#每隔一段時間計算在所有資料上的交叉熵並輸出。

total_cross_entropy = sess.run(cross_entropy,feed_dict=)

print("after %d trainig step(s),cross entropy on all data is %g" % (i,total_cross_entropy))

print(sess.run(w1))

print(sess.run(w2))

神經網路訓練

學習了bp神經網路演算法,剛開始最終要的一點不明白的就是前一層和後一層 這裡指的只有三層,輸入層,隱藏層,輸出層 的權重,其實神經網路演算法中,前一層的每乙個節點和後一層的每乙個節點都有連線權重,初始權重是隨機的。而更新權重是通過輸出層的值來反向更新的。基本過程如下 1.輸入第乙個訓練樣本 對應的就...

神經網路訓練時精度問題

今天在tensorflow下,用三層網路結構訓練mnist上的資料時,精度出現了很大偏差,在此做個記錄,原因如下 1.w,b初始化為0,很可能直接導致模型失效,無法收斂。因此可以對w初始化為隨機值解決 在cnn中,w的隨機化,也是為了使得同一層的多個filter,初始w不同,可以學到不同的特徵,如果...

神經網路解決二分類問題

import tensorflow as tf from numpy.random import randomstate batch size 8 w1 tf.variable tf.random normal 2,3 stddev 1,seed 1 w2 tf.variable tf.random...