1、tensorflow的反向傳播
import tensorflow as tf
import numpy as np
batch_size=8
seed=23455
#基於seed產生隨機數
rng =np.random.randomstate(seed)
#隨機數返回32行2列的矩陣 表示32組 體積和重量是輸入資料集
x = rng.rand(32,2)
#從x這個32行2列的矩陣中 取出一行 判斷如果和小於1給y賦值1 如果不小於1給y賦值0
#作為輸入資料集合的標籤
y = [[int(x0 + x1 <1)]for(x0,x1) in x]
print("\n",x)
print("\n",y)
#1定義神經網路的輸入、引數和輸出,定義前向傳播過程。
x = tf.placeholder(tf.float32,shape=(none,2))
y_= tf.placeholder(tf.float32,shape=(none,1))
w1=tf.variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.variable(tf.random_normal([3,1],stddev=1,seed=1))
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
#2定義損失函式級反向傳播
loss = tf.reduce_mean(tf.square(y-y_))
train_step=tf.train.gradientdescentoptimizer(0.001).minimize(loss) #梯度下降,學習率是0.001
#train_step=tf.train.momentumoptimizer(0.001).minimize(loss)
#train_step=tf.train.adadeltaoptimizer(0.001).minimize(loss)
with tf.session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
#輸出未經訓練的引數
#print("\n",sess.run(w1))
#print("\n",sess.run(w2))
#訓練模型
steps = 3000
for i in range(steps):
start = (i*batch_size) %32
end = start + batch_size
sess.run(train_step,feed_dict=)
if i% 500 == 0:
total_loss = sess.run(loss,feed_dict=)
#3000輪後列印訓練後的引數值
print("\n")
print("w1:",sess.run(w1))
print("w2",sess.run(w2))
理解back propagation反向傳播
首先需要明白back propagation的作用 深度學習的訓練是成本函式 cost function 最小化的過程,一般採取梯度下降法求解。那麼怎麼計算梯度呢?這就要用到back propagation了。計算乙個數學表示式的梯度是很直接的,但計算是昂貴的。而反向傳播演算法使用簡單的方法有效的減...
TensorFlow實現MNIST反向傳播
coding utf 8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data defsigmaprime x 用sigmoid函式的導數更新權重 param x return 更新後的權...
pooling mean max 前向和反向傳播
對於mean pooling,真的是好簡單 假設pooling的窗大小是2x2,在forward的時候啊,就是在前面卷積完的輸出上依次不重合的取2x2的窗平均,得到乙個值就是當前mean pooling之後的值。backward的時候,把乙個值分成四等分放到前面2x2的格仔裡面就好了。如下 forw...