您的位置:首页 > 理论基础 > 计算机网络

深度学习——用神经网络解决非线性问题

2018-12-29 15:24 274 查看

参考书籍:《深度学习——基于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)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐