'''
xor x 3 y
'''# 匯入深度學習框架
import tensorflow as tf
import numpy as np
from matplotlib import pyplot as plt
# 設定中文字型和負號正確顯示
plt.rcparams[
'font.sans-serif']=
['simhei'
]plt.rcparams[
'axes.unicode_minus']=
false
# 設定框架隨機種子,保證每次執行結果一致
tf.set_random_seed(1)
# 資料準備
x =[[0
,0],
[0,1
],[1
,0],
[1,1
]]y =[[0
],[1
],[1
],[0
]]# 定義佔位符
x = tf.placeholder(dtype=tf.float32,shape=
[none,2
])y = tf.placeholder(dtype=tf.float32,shape=
[none,1
])# 定義模型
w1 = tf.variable(tf.random_normal([2
,3])
,dtype=tf.float32)
b1 = tf.variable(tf.random_normal([3
]),dtype=tf.float32)
w2 = tf.variable(tf.random_normal([3
,1])
,dtype=tf.float32)
b2 = tf.variable(tf.random_normal([1
]),dtype=tf.float32)
# 前向傳播
z1 = tf.matmul(x,w1)
+ b1
a1 = tf.sigmoid(z1)
z2 = tf.matmul(a1,w2)
+ b2
a2 = tf.sigmoid(z2)
# 代價函式
cost =
- tf.reduce_mean(y * tf.log(a2)+(
1- y)
* tf.log(
1- a2)
)cost_history =
# 反向傳播
m = tf.cast(tf.shape(x)[0
],dtype=tf.float32)
dz2 = a2 - y
dw2 = tf.matmul(tf.transpose(a1)
,dz2)
/ mdb2 = tf.reduce_mean(dz2,axis=0)
da1 = tf.matmul(dz2,tf.transpose(w2)
)dz1 = da1 * a1 *(1
- a1)
dw1 = tf.matmul(tf.transpose(x)
,dz1)
/ mdb1 = tf.reduce_mean(dz1,axis=0)
# 引數更新
learning_rate =2*
10e-
2update =
[ tf.assign(w2, w2 - learning_rate * dw2)
, tf.assign(w1, w1 - learning_rate * dw1)
, tf.assign(b1, b1 - learning_rate * db1)
, tf.assign(b2, b2 - learning_rate * db2),]
# 開啟會話
with tf.session(
)as sess:
# 初始化所有引數
sess.run(tf.global_variables_initializer())
# 訓練模型
for step in
range
(10001):
cost_val, _ = sess.run(
[cost,update]
,feed_dict=
)if step %
500==0:
print
(step,cost_val)
# **
predict = sess.run(a2,feed_dict=
)print
(predict)
# 畫圖
plt.title(
'代價函式'
tensorflow實戰 實現簡單的神經網路
from tensorflow.examples.tutorials.mnist import input data import tensorflow as tf mnist input data.read data sets mnist data one hot true sess tf.int...
TensorFlow入門02 簡單的神經網路
在本文中會先介紹一些概念,然後給出乙個簡單的完整神經網路樣例程式。首先啟用函式可以解決線性不可分問題。讀者可以訪問通過網頁瀏覽器就可以訓練簡單神經網路並實現視覺化過程。截圖如下所示 神經網路模型的效果以及優化的目標是通過損失函式 loss function 來定義的。分類問題 如手寫數字識別 如何判...
TensorFlow實現高階的卷積神經網路
本人使用的資料集是cifar 10。這是乙個經典的資料集,許多 也都是在這個資料集上進行訓練。使用的卷積神經網路是根據alex描述的cuda convnet模型修改得來。在這個神經網路中,我使用了一些新的技巧 1 對weights進行了l2的正則化 2 將影象進行翻轉 隨機剪下等資料增強,製造了更多...