Tensorflow库的基本用法(十一)

转载自https://blog.csdn.net/qq_36686996/article/details/79350355

Tensorflow库的基本用法(十一)

TensorFlow的基本类型是tensor

1.变量:

在Tensorflow里面创建一个变量都需要一个Variable()函数创建,首先来看一个简单的矩阵乘法的例子。

import tensorflow as tf
w = tf.Variable([[0.5,1.0]])
x = tf.Variable([[2.0],[1.0]])
y = tf.matmul(w,x)
print(y)

可以得到输出:

Tensor(“MatMul:0”, shape=(1, 1), dtype=float32)

输出并不是一个值,而是一个Tensor类型,输出w,x也都是一样的。

w:<tf.Variable ‘Variable:0’ shape=(1, 2) dtype=float32_ref>

x:<tf.Variable ‘Variable_1:0’ shape=(2, 1) dtype=float32_ref>

可以看到他们的值都不是一个确切的数字,只是一个类型。所以tensorflow的赋值只是一个简单的搭建骨架而已,并没有把值写进去。

要想真正的初始化复制,先要执行一个global_variables_initializer(),初始化所以数据,然后把他放在一个Session中运行,就可以打出y的值了。

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
w = tf.Variable([[0.5,1.0]])
x = tf.Variable([[2.0],[1.0]])
y = tf.matmul(w,x)
print(x)
init_op = tf.global_variables_initializer();
with tf.Session() as sess:
    sess.run(init_op)
    print(y.eval())
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

在CPU的情况下,TensorFlow会出现一个警告,使用这段代码可以消除警告。

在TensorFlow里面是不能直接打印y的值的,需要y.eval()才可以,直接打印是打印他本身的结构。

总结:

1,首先要给变量创建一个骨架,也就是矩阵的行数列数这些。

2,创建一个Sessions计算区域,用于计算。

3,创建一个全局初始化的容器,并且要在Sessions中运行。

4,使用变量名.eval()打印出值。

2.TensorFlow的基本操作

TensorFlow的矩阵操作其实和numpy是差不多的。

tf.zeros([x , y])就是创建一个x行y列并且值为零的一个矩阵

tf.zeros_like(tensor)创建一个和tensor一样行一样列但是值为零的矩阵

tf.ones([x , y])创建一个x行y列的一个矩阵,但是值为1

tf.ones_like(tensor)用法差不多

创建一个数组或者是向量,不可以直接创建,如果不是tensor类型是不可以使用tensorflow进行计算的。

如果要创建一个向量,直接使用[1,2,3,4,5]是不行的。创建知识一个普通的数组,还要使用tf.constant转换。

也可以tf.constans(-1.0 , shape = [2,3]),这样就创建了一个两行三列值都是-1的矩阵了。

tf.linspace()就是创建一个等差数列。tf.linspace(10 , 12 , 3)就会在10到12平均选取3个数出来,10,11,12

tf.range()也是一样的,只是不包含最后一个。


以上的结果要输出都要在Session里面进行一个eval()的输出才行。

ndarray转换tensorflow类型:

a = numpy.zeros([0,0,0][0,0,0])

ta = tf.convert_to_tensor(a)

这样就转成了tensorflow所支持的一个格式。


tf.placeholder这个函数只是会占一个位置,而不会初始化,到使用的时候才会复制计算。

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
c = tf.multiply(a , b)
sess = tf.Session()
print(sess.run([c] , feed_dict={a : 2 , b : 3}))
只有在最后才进行赋值


3.小例子

实现一个每次加一的程序:

state = tf.Variable(0)
new_value = tf.add(state , tf.Variable(1))
updata = tf.assign(state , new_value)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(3):
        sess.run(updata)
        print(sess.run(state))
    pass

tf.add(a , b)就是相加,把b加到a,但是a的值还是原来的,结果是返回值。assign就是用新的值替代旧的值。在TensorFlow里面,=要替换成assign。a = state要替换成tf.assign(a , state)


4.实现简单的线性回归

首先要准备1000个数据点。

point_num = 1000
vector_set = []
for i in range(point_num):
    x = np.random.normal(0.0 , 0.55)
    y = 0.1 * x + 0.3 + np.random.normal(0.0 , 0.05)
    vector_set.append([x , y])

x = [v[0] for v in vector_set]
y = [v[1] for v in vector_set]
在y = 0.1x + 0.3这条线附近创建1000个点。
np.random.normal(0.0 , 0.55)

使用高斯分布,0.0的中心点0.55的方差的随机值。


点的分布都是可以使用线性回归曲线分开的。

然后就是要进行训练了:

w = tf.Variable(tf.random_uniform([1] , -1.0 , 1.0),name='w')
b = tf.Variable(tf.zeros([1]),name='b')
yi = w * x + b
loss = tf.reduce_mean(tf.square(yi - y),name = 'loss')
optomer = tf.train.GradientDescentOptimizer(0.5)
train = optomer.minimize(loss , name = 'train')
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(50):
    sess.run(train)
    print('loss = ',sess.run(loss),sess.run(w))

plt.plot(x , sess.run(w) * x + sess.run(b))
plt.scatter(x , y, c = 'r')
plt.show()
首先先要创建一个权值和偏置值,

tf.random_uniform([1] , -1.0 , 1.0)

这个函数就是在-1到1之前创建一个随机矩阵,这个矩阵的shape就是【1】,其实就是一个数字。

之后得到预测值,

yi = w * x + b

使用均方差得到损失值:

loss = tf.reduce_mean(tf.square(yi - y),name = 'loss')

设置梯度下降的学习机:

optomer = tf.train.GradientDescentOptimizer(0.5)

学习率是0.5

train = optomer.minimize(loss , name = 'train')

训练函数

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(50):
    sess.run(train)
    print('loss = ',sess.run(loss),sess.run(w))

这个就是开始训练50次了。


可以看到已经结果还是可以得。









            </div>

Tensorflow库的基本用法(十一)

TensorFlow的基本类型是tensor

1.变量:

在Tensorflow里面创建一个变量都需要一个Variable()函数创建,首先来看一个简单的矩阵乘法的例子。

import tensorflow as tf
w = tf.Variable([[0.5,1.0]])
x = tf.Variable([[2.0],[1.0]])
y = tf.matmul(w,x)
print(y)

可以得到输出:

Tensor(“MatMul:0”, shape=(1, 1), dtype=float32)

输出并不是一个值,而是一个Tensor类型,输出w,x也都是一样的。

w:<tf.Variable ‘Variable:0’ shape=(1, 2) dtype=float32_ref>

x:<tf.Variable ‘Variable_1:0’ shape=(2, 1) dtype=float32_ref>

可以看到他们的值都不是一个确切的数字,只是一个类型。所以tensorflow的赋值只是一个简单的搭建骨架而已,并没有把值写进去。

要想真正的初始化复制,先要执行一个global_variables_initializer(),初始化所以数据,然后把他放在一个Session中运行,就可以打出y的值了。

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
w = tf.Variable([[0.5,1.0]])
x = tf.Variable([[2.0],[1.0]])
y = tf.matmul(w,x)
print(x)
init_op = tf.global_variables_initializer();
with tf.Session() as sess:
    sess.run(init_op)
    print(y.eval())
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

在CPU的情况下,TensorFlow会出现一个警告,使用这段代码可以消除警告。

在TensorFlow里面是不能直接打印y的值的,需要y.eval()才可以,直接打印是打印他本身的结构。

总结:

1,首先要给变量创建一个骨架,也就是矩阵的行数列数这些。

2,创建一个Sessions计算区域,用于计算。

3,创建一个全局初始化的容器,并且要在Sessions中运行。

4,使用变量名.eval()打印出值。

2.TensorFlow的基本操作

TensorFlow的矩阵操作其实和numpy是差不多的。

tf.zeros([x , y])就是创建一个x行y列并且值为零的一个矩阵

tf.zeros_like(tensor)创建一个和tensor一样行一样列但是值为零的矩阵

tf.ones([x , y])创建一个x行y列的一个矩阵,但是值为1

tf.ones_like(tensor)用法差不多

创建一个数组或者是向量,不可以直接创建,如果不是tensor类型是不可以使用tensorflow进行计算的。

如果要创建一个向量,直接使用[1,2,3,4,5]是不行的。创建知识一个普通的数组,还要使用tf.constant转换。

也可以tf.constans(-1.0 , shape = [2,3]),这样就创建了一个两行三列值都是-1的矩阵了。

tf.linspace()就是创建一个等差数列。tf.linspace(10 , 12 , 3)就会在10到12平均选取3个数出来,10,11,12

tf.range()也是一样的,只是不包含最后一个。


以上的结果要输出都要在Session里面进行一个eval()的输出才行。

ndarray转换tensorflow类型:

a = numpy.zeros([0,0,0][0,0,0])

ta = tf.convert_to_tensor(a)

这样就转成了tensorflow所支持的一个格式。


tf.placeholder这个函数只是会占一个位置,而不会初始化,到使用的时候才会复制计算。

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
c = tf.multiply(a , b)
sess = tf.Session()
print(sess.run([c] , feed_dict={a : 2 , b : 3}))
只有在最后才进行赋值


3.小例子

实现一个每次加一的程序:

state = tf.Variable(0)
new_value = tf.add(state , tf.Variable(1))
updata = tf.assign(state , new_value)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(3):
        sess.run(updata)
        print(sess.run(state))
    pass

tf.add(a , b)就是相加,把b加到a,但是a的值还是原来的,结果是返回值。assign就是用新的值替代旧的值。在TensorFlow里面,=要替换成assign。a = state要替换成tf.assign(a , state)


4.实现简单的线性回归

首先要准备1000个数据点。

point_num = 1000
vector_set = []
for i in range(point_num):
    x = np.random.normal(0.0 , 0.55)
    y = 0.1 * x + 0.3 + np.random.normal(0.0 , 0.05)
    vector_set.append([x , y])

x = [v[0] for v in vector_set]
y = [v[1] for v in vector_set]
在y = 0.1x + 0.3这条线附近创建1000个点。
np.random.normal(0.0 , 0.55)

使用高斯分布,0.0的中心点0.55的方差的随机值。


点的分布都是可以使用线性回归曲线分开的。

然后就是要进行训练了:

w = tf.Variable(tf.random_uniform([1] , -1.0 , 1.0),name='w')
b = tf.Variable(tf.zeros([1]),name='b')
yi = w * x + b
loss = tf.reduce_mean(tf.square(yi - y),name = 'loss')
optomer = tf.train.GradientDescentOptimizer(0.5)
train = optomer.minimize(loss , name = 'train')
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(50):
    sess.run(train)
    print('loss = ',sess.run(loss),sess.run(w))

plt.plot(x , sess.run(w) * x + sess.run(b))
plt.scatter(x , y, c = 'r')
plt.show()
首先先要创建一个权值和偏置值,

tf.random_uniform([1] , -1.0 , 1.0)

这个函数就是在-1到1之前创建一个随机矩阵,这个矩阵的shape就是【1】,其实就是一个数字。

之后得到预测值,

yi = w * x + b

使用均方差得到损失值:

loss = tf.reduce_mean(tf.square(yi - y),name = 'loss')

设置梯度下降的学习机:

optomer = tf.train.GradientDescentOptimizer(0.5)

学习率是0.5

train = optomer.minimize(loss , name = 'train')

训练函数

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for i in range(50):
    sess.run(train)
    print('loss = ',sess.run(loss),sess.run(w))

这个就是开始训练50次了。


可以看到已经结果还是可以得。









            </div>

猜你喜欢

转载自blog.csdn.net/qq_26938759/article/details/80341927