B站tensorflow机器学习
机器学习 y=x^2
from __future__ import print_function
import tensorflow as tf
import numpy as np
def add_layer(inputs, in_size, out_size, activation_function=None):
# add one more layer and return the output of this layer
Weights = tf.Variable(tf.random_normal([in_size, out_size]))
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
Wx_plus_b = tf.matmul(inputs, Weights) + biases
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
# Make up some real data -1 to 1 num=300 newaxis
#增加一个维度 [nweaxis, :]增加行维度 [:, newaxis]增加列维度
x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
# 构建所需的数据。 这里的x_data和y_data并不是严格的一元二次函数的关系,因为我们多加了一个noise,这样看起来会更像真实情况。
y_data = np.square(x_data) - 0.5 + noise
# define placeholder for inputs to network 这里的None代表无论输入有多少都可以,因为输入只有一个特征,所以这里是1。
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# add hidden layer
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# add output layer
prediction = add_layer(l1, 10, 1, activation_function=None)
# the error between prediction and real data
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
reduction_indices=[1])) #=0 对列维度操作 , =1 对行维度操作
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(1000):
# training
sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
if i % 50 == 0:
# to see the step improvement
print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
张量理解
https://www.cnblogs.com/abella/p/10142935.html
函数学习
tf.Variable
{
initial_value, 初始化的值
trainable=True, 如果为True,才能对它使用Optimizer
collections=None, 指定该图变量的类型
validate_shape=True, 如果为False,则不进行类型和维度检查
name=None 变量的名称,如果没有指定则系统会自动分配一个唯一的值
}
tf.random_normal
{
shape, 输出张量的形状,必选
mean=0.0, 正态分布的均值,默认为0
stddev=1.0, 正态分布的标准差,默认为1.0
dtype=tf.float32, 输出的类型,默认为tf.float32
seed=None, 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
name=None 操作的名称
}
EX tf.random_normal([2, 3], stddev=1, seed=1) 两行三列 方差为1 随机种子数为1(可省略)
pycharm
data数据声明后没有赋值 执行sess.run(init) 后才赋值 .
tf中张量与常规向量不同的是执行"print data"输出的是data的形状和数据类型等属性信息,
获取 data的值需要调用sess.run(w1)方法。
随机种子的含义,seed的每个值对应一组随机数,用相同的种子产生的随机数相同
tf.matmul(x,y) 与tf.multiply(x1,y1)
multiply() 矩阵点乘
matmul() 矩阵乘法 a(1,1) = 第一行点乘以第一列
np.linspace(-1,1,300) =[-1,1) 300个数
tf.placeholder() 占位符
{
dtype, 数据类型 (常用 tf.float32)
shape, 数据size
name,
}
运行模型的时候通过feed_dict()函数向占位符喂入数据。
sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
代码基于莫烦python