隨機生成200個樣本,每個樣本2個特徵,輸出2個類別
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
defset_color
(y):
if y ==0:
return
'green'
elif y ==1:
return
'orange'
n_samples =
200x, y = make_classification(n_samples=n_samples, n_features=
2, n_redundant=
0, n_clusters_per_class=
1, n_classes=2)
tratn_size =
int(n_samples *
0.8)
x_train, y_train = x[
:tratn_size]
, y[
:tratn_size]
x_test, y_test = x[tratn_size:
], y[tratn_size:
]plt.scatter(x[:,
0], x[:,
1], c=
list
(map
(set_color, y)
), s=
2, marker=
'o')
plt.show(
)
生成資料如下:
輸出神經元的個數跟輸出資料的維度有關,因為輸出資料是1維(不是n_classes!是要看每項是幾維陣列),輸出神經元就只有乙個
x = tf.placeholder(dtype=tf.float32, shape=
[none,2
], name=
'x-input');
y = tf.placeholder(dtype=tf.float32, shape=
[none,1
], name=
'y-input'
);
構建的神經網路如下:
w1是輸入層->隱藏層的權重,shape=[輸入,輸出],因為輸入的資料是2維,輸入=2
b1的shape=w1的輸出
w2是隱藏層-輸入層的權重,由於w1的輸出是3個神經元,輸入資料是1維,shape=[3,1]
# 輸入資料->隱藏層
w1 = tf.get_variable(name=
'weight1'
, shape=[2
,3],
initializer=tf.random_normal_initializer(stddev=
1, dtype=tf.float32)
)b1 = tf.get_variable(name=
'bias1'
, shape=[3
],initializer=tf.random_normal_initializer(stddev=
1, dtype=tf.float32)
)# 隱藏層->輸出層
w2 = tf.get_variable(name=
'weight2'
, shape=[3
,1],
initializer=tf.random_normal_initializer(stddev=
1, dtype=tf.float32)
)b2 = tf.get_variable(name=
'bias2'
, shape=[1
],initializer=tf.random_normal_initializer(stddev=
1, dtype=tf.float32)
)# 新增啟用函式層
activate_layer = tf.nn.sigmoid(tf.matmul(x, w1)
+ b1)
y_pred = tf.matmul(activate_layer, w2)
+ b2 # 模型**的y值
# 使用**的值和訓練資料的label的方差作為損失函式
loss = tf.nn.l2_loss(y_pred-y)
# 使用梯度下降,學習率=0.001
train_op = tf.train.gradientdescentoptimizer(learning_rate=
0.001
).minimize(loss)
訓練模型
with tf.session(
)as sess:
# tensor初始化
sess.run(tf.global_variables_initializer())
# 使y_train變成二維
y_train = y_train.reshape(tratn_size,1)
# 訓練10000次
for i in
range
(10000):
sess.run(train_op, feed_dict=
)print
("w1:\n"
, sess.run(w1)
)print
("b1:\n"
, sess.run(b1)
)print
("w2:\n"
, sess.run(w2)
)print
("b2:\n"
, sess.run(b2)
)# 測試,比較**的值和真實值
count =
0 pred =
for i in
range(10
):y_value = sess.run(y_pred[i]
, feed_dict=
)[y_test[i]
,y_value[0]
])df=pd.dataframe(pred,columns=
["實際值"
,"**值"])
print
(df)
最終的w和b:
w1:[[
-3.142712
0.32294717
1.3233093][
-0.17155744
-0.24963987
-0.95587605]]
b1:[
0.57773936
-1.6887634
-0.60021317
]w2:[[
-0.9482091][
-0.661875][
0.14483933]]
b2:[
1.0183536
]
測試結果:
實際值 **值
0 -0.004416
0 0.008037
0 0.015754
0 -0.032110
1 1.012241
1 1.012437
0 -0.033755
1 1.021023
1 1.008571
0 -0.020770
也可以分批訓練資料
batch_size =
20#每次訓練20個
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...
神經網路簡介 多層神經網路
如上圖所示,該神經網路有三層。我們標記第一層 也就是輸入層 為a 1 第一層與第二層連線權重為w 1 然後第一層輸入與第一層權重的線性和為z 1 第一層神經元個數為n 1 並依次標記剩餘網路層。可以看出,存在 z l j i 1 n l a l i w l i,j a l w l j a l 1 f...