Tensorflow學習——第一章(二)
阿新 • • 發佈:2018-12-05
TensorFlow實現神經網路
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 1.生成訓練樣本 dataset_size=128 X=np.random.RandomState(1).uniform(0,1,(dataset_size,2)) Y=[[int(x1+x2<1)] for (x1,x2) in X] for i in range(len(X)): if Y[i][0]==1: plt.scatter(X[i][0],X[i][1],c='r') else: plt.scatter(X[i][0],X[i][1],c='k') plt.show() # 2.定義訓練資料batch大小 batchsize=8 # 3.定義神經網路引數 w1=tf.Variable(tf.random_normal([2,3],mean=0,stddev=1,seed=1)) w2=tf.Variable(tf.random_normal([3,1],mean=0,stddev=1,seed=1)) 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) # 建立會話執行tensorflow with tf.Session() as sess: # 初始化變數 init_op=tf.initialize_all_variables() sess.run(init_op) STEPS=5000 print('Start training>............') for i in range(STEPS): start=(i*batchsize)%dataset_size end=min(start+batchsize,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('第%d次訓練,總體交叉熵為:%f'%(i,total_cross_entropy))