Tensorflow實現一個簡單的二分類問題

楊Laughing發表於2017-06-23

說好的每天一更··結果只堅持了一天···笑
從頭開始學習

import tensorflow as tf

#這裡通過numpy工具包來生成模擬資料集
from numpy.random import RandomState

#定義訓練資料batch的大小

batch_size = 8
#定義神經網路引數

w1 = tf.Variable(tf.random_normal([2,3],stddev = 1,seed = 1))
w2 = tf.Variable(tf.random_normal([3,1],stddev = 1,seed = 1))

#在訓練時需要把資料分成較小的batch
x = tf.placeholder(tf.float32,shape=(None,2),name = 'x-input')
y_ = tf.placeholder(tf.float32,shape=(None,1),name = 'y-input')

#定義神經網路前向傳播過程

a = tf.matmul(x,w1)
y = tf.matmul(a,w2)

#定義損失函式和反向傳播的演算法

cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

#通過隨機函式生成一個模擬資料集

rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size,2)

Y = [[int(x1+x2 < 1)] for (x1,x2) in X]

with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    print (sess.run(w1))
    print (sess.run(w2))

    STEPS = 5000
    for i in range(STEPS):
        start = (i * batch_size) % dataset_size
        end = min(start+batch_size,dataset_size)

        #通過選取的樣本訓練神經網路並更新引數
        sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})

        if i %1000 == 0:

            total_cross_entropy = sess.run(cross_entropy,feed_dict={x:X,y_:Y})

            print('after %d trainning step(s),cross entrop on all data is %g'
                  %(i,total_cross_entropy))

    print (sess.run(w1))
    print (sess.run(w2))

張量是Tensorflow的資料模型,其中輸入和輸出都應該是張量···張量是什麼意思呢···好像不太清楚樣,但是沒關係····張量本身並沒有儲存任何資料,它只是對運算結果的引用。
有個Tensorflow遊樂場可以幫助大家更好的理解神經網路
http://playground.tensorflow.org

相關文章