深度学习——用神经网络解决非线性问题
参考书籍:《深度学习——基于Python语言和TensorFlow平台》
已知德智育三项成绩,总分大于等于95即可当选三好学生。用1代表是,用0代表否。线性问题是可以传递的,非线性问题则是所谓的“一票否决制”,如果在一串连续的关系中有一个非线性关系出现,一般来说,整个问题都将成为非线性的问题。
**函数sigmoid: 将线性化的关系转换成非线性化关系的函数,可以把任何数字变成一个0到1范围之间的数字。
import tensorflow as tf
import random
import numpy as np
random.seed()
# 批量生成随机训练数据
rowCount = 5
# np.full函数的作用是生成一个多维数组,并用预定的值来填充
xData = np.full(shape=(rowCount, 3), fill_value=0, dtype=np.float32)
yTrainData = np.full(shape=rowCount, fill_value=0, dtype=np.float32)
goodCount = 0
# 生成随机训练数据的循环
for i in range(rowCount):
xData[i][0] = int(random.random() * 11 + 90)
xData[i][1] = int(random.random() * 11 + 90)
xData[i][2] = int(random.random() * 11 + 90)
xAll = xData[i][0] * 0.6 + xData[i][1] * 0.3 + xData[i][2] * 0.1
if xAll >= 95:
yTrainData[i] = 1
goodCount = goodCount + 1
else:
yTrainData[i] = 0
print("xData=%s" % xData)
print("yTrainData=%s" % yTrainData)
print("goodCount=%d" % goodCount)
x = tf.placeholder(shape=[3], dtype=tf.float32)
# yTrain因为只是一个普通数字,不是向量,如果要给它一个形态的话,可以用一个空的方括号"[]"来表示
yTrain = tf.placeholder(shape=[], dtype=tf.float32)
# tf.zeros([3]返回一个全值为0的3维向量
w = tf.Variable(tf.zeros([3]), dtype=tf.float32)
b = tf.Variable(80, dtype=tf.float32)
wn = tf.nn.softmax(w)
n1 = x*w
n2 = tf.reduce_sum(n1) - b
# tf.reduce_sum函数的作用是把作为它的参数的向量中的所有维度的值相加求和
y = tf.reduce_sum(n2)
loss = tf.abs(y-yTrain)
optimizer = tf.train.RMSPropOptimizer(0.1)
train = optimizer.minimize(loss)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(2):
for j in range(rowCount):
result = sess.run([train, x, yTrain, wn, b, n2, y, loss], feed_dict={x: xData[j], yTrain: yTrainData[j]})
print(result)