普通神經網路tensorflow例子1

2021-09-13 10:33:34 字數 4409 閱讀 7277

隨機生成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...