tensorflow reverse 反向傳播

2021-10-03 15:26:12 字數 1577 閱讀 8041

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...