tensorflow实战

tensorflow环境安装搭建及简易神经网络

2018-11-11  本文已影响0人  YinliX

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):


success.png

简易神经网络实现

环境

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))

运行结果(部分)

result.png
上一篇下一篇

猜你喜欢

热点阅读