tensorflow 1 完整的反向傳播神經網路

2021-08-20 07:54:25 字數 1859 閱讀 5441

#生成模擬資料集

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:

init_op = tf.initialize_all_variables()

#初始化變數

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 training step(s),cross entropy on

all data is %g'%(i,total_cross_entropy))

print(sess.run(w1))

print(sess.run(w2))

tensorflow 1 共享變數

共享變數 reuse variables example1 with tf.variable scope try 先建立兩個變數w1,w2 w2 tf.get variable w1 shape 2,3,4 dtype tf.float32 w3 tf.get variable w2 shape 2...

tensorflow1 構建線性模型

x是給定的輸入資料 使用tensorflow構建乙個模型,開始的時候,w和b全部給成0,讓其訓練,使其接近預設的模型。即讓w接近0.1,b接近0.2 import tensorflow as tf import numpy as np x data np.random.rand 100 y data...

神經網路 tensorflow 1

import tensorflow as tf import numpy as np create data x data np.random.rand 100 astype np.float32 在tensorflow中大部分的資料的資料型別都是float32 y data x data 0.1 ...