tensorflow环境搭建
下载安装python3.6.7,安装,记住安装路径,打开pycharm新建项目,settings中更改project interpreter,选择python解释器,add,选择system interpreter,选择python3.6.7的安装路径中的python.exe可执行文件,确定,然后添加包,搜索tensorflow,选择pypi的源,或者选择清华的源,选中specify version,选择1.4.0版本,点击install,安装完成后应用即可,安装成功截图(pycharm console):
简易神经网络实现
环境
python3.6.7、tensorflow1.4.0
神经网络结构
假定输入特征有100个,共100个数据,每个数据的输出为0或1,即一个简单的二分类问题,再设定神经网络有一个隐含层,此隐含层有100个神经元,不考虑偏置项,那么此隐含层a参数就是一个100×100的矩阵,输出层的参数就是一个100×1的矩阵,损失函数采用最常用的交叉熵,优化算法采用自适应优化算法,步长取0.0001,训练数据的特征采用numpy.random.RandomState随机生成,若某组数据的100个特征的平均值小于0.5,则将输出y取为0,否则为1,定义训练次数为5000次,每次取一批数据进行训练,批大小(batch_size)取10,另外,每训练1000次打印输出当前所有数据的交叉熵查看,最后打印输出训练好的隐含层和输出层的参数。
源代码
# -*- coding: UTF-8 -*-
#Author:Yinli
import tensorflow as tf
from numpy.random import RandomState
import numpy as np
#设置只显示warning和error
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#定义batch大小为10
batch_size = 10
#初始化w1和w2
w1 = tf.Variable(tf.random_normal([100,100], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([100,1], stddev=1, seed=2))
#定义x和y_的位置
x = tf.placeholder(tf.float32, shape=(None, 100), name='x_input')
y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y_input')
#定义前向传播,a是隐含层,y是输出层
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
#定义y和损失函数,损失函数取交叉熵
y = tf.sigmoid(y)
cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10, 1.0)) + (1-y_)*tf.log(tf.clip_by_value(1-y,1e-10,1.0)))
#定义训练步长和损失函数
train_step = tf.train.AdamOptimizer(0.0001).minimize(cross_entropy)
#随机生成x和y
rdm = RandomState(1)
dataset_size = 100
X = rdm.rand(dataset_size,100)
Y = [[int(np.mean(vect)<0.5)] for vect in X]
#新创建一个会话
with tf.Session() as sess:
#初始化变量
init_op = tf.global_variables_initializer()
sess.run(init_op)
#打印查看w1和w2
print("初始化的参数w1和w2分别为:")
print(sess.run(w1))
print(sess.run(w2))
#定义训练次数
STEPS = 5000
for i in range(STEPS):
#每次选一个batch进行训练
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]})
#每训练1000次打印输出当前交叉熵
if i%1000 == 0:
total_cross_entropy = sess.run(cross_entropy,feed_dict={x:X,y_:Y})
print("After %d training step(s), cross entropy on all data is %g" % (i,total_cross_entropy))
#训练完毕打印输出w1和w2
print("训练完后的参数w1和w2分别为:")
print(sess.run(w1))
print(sess.run(w2))