简单的神经网络解决实际问题

先描述一下我想解决的问题:文件中保存着一个大约60000行的数据,有三列,分别是时间,人数,和流量需求。我需要仅仅根据着三列数据,判断基站的开和关,代码如下。

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import data_processing


data = data_processing.load_data()
data = data.values.astype(np.float32)
np.random.shuffle(data)                   
sep = int(0.7*len(data))
train_data = data[:sep]                         # training data (70%)
test_data = data[sep:]

tf_input = tf.placeholder(tf.float32, [None, 3], "input")#占地方用的
tfx = tf_input[:, :2]
tfy = tf_input[:, 2:]

w1=tf.Variable(tf.random_normal([2,128],seed=1))#列的个数就代表神经原的个数
w2=tf.Variable(tf.random_normal([128,128],seed=1))#列的个数代表输出的个数
w3=tf.Variable(tf.random_normal([128,128],seed=1))
w4=tf.Variable(tf.random_normal([128,1],seed=1))
b1=tf.Variable(tf.random_normal([1,128],seed=1))
b2=tf.Variable(tf.random_normal([128,1],seed=1))

a=tf.matmul(tfx,w1)
a1=tf.tanh(a)
b=tf.matmul(a1,w2)
b1=tf.tanh(b)
c=tf.matmul(b1,w3)
c1=tf.tanh(c)
y=tf.matmul(c1,w4)





#loss = tf.losses.softmax_cross_entropy(onehot_labels=tfy, logits=y)
loss=tf.reduce_mean(tf.square(y-tfy))#利用均方误差计算loss(相当于一个损失函数)
#train_op=tf.train.GradientDescentOptimizer(0.001).minimize(loss)#0.001是学习率
#train_step=tf.train.MomentumOptimizer(0.001).minimize(loss)#可使用这三个优化方法,可以试一
train_op=tf.train.AdadeltaOptimizer(0.001).minimize(loss)
#train_op = tf.train.GradientDescentOptimizer(learning_rate=0.001)

with tf.Session() as sess:
    init_op=tf.global_variables_initializer()#初始化所有参数
    sess.run(init_op)

    #训练模型
    steps=60000
    for i in range(steps):
        batch_index = np.random.randint(len(train_data), size=16)#batch_index表示一下子喂给神经网络多少的数据
        sess.run(train_op, {tf_input: train_data[batch_index]})

        if i%500==0:
            total_loss=sess.run(loss,feed_dict={tf_input: test_data})
            print("after %d training steps,loss on all data is %g"%(i,total_loss))
w1=tf.Variable(tf.random_normal([2,128],seed=1))
#tf.random_normal函数:是符合正太分布的,在没有特殊的要求下,均值是0,均方误差是1
2表示输入是两列,128是神经元的个数。seed表示随机生成的W1是固定不变的。这是神经网络的第一层
w2=tf.Variable(tf.random_normal([128,128],seed=1))#列的个数代表输出的个数
#这是神经网络的第二层,128个输入,128个输出,是全连接的。
w3=tf.Variable(tf.random_normal([128,128],seed=1))
#这是神经网络的第三层,同理
w4=tf.Variable(tf.random_normal([128,1],seed=1))#

 

 
 

 

 

 

你可能感兴趣的:(笔记)