TensorFlow学习

TensorFlow学习0.导语1.Session会话控制(两种打开模式)2.Tensorflow使用Variable3.Placeholder 传入值4.激励函数(activate function)5.定义添加神经层的函数6.建造神经网络7.matplotlib 可视化8.学习文章

TensorFlow学习

0.导语

本周将会陆续更新莫凡python配套视频的自己学习笔记,学习内容为tensorflow! 欢迎转发,收藏!

预备知识 安装TensorFlow:TensorFlow-Gpu 1.8安装

1.Session会话控制(两种打开模式)

定义矩阵

matrix1=tf.constant([[3,3]])
matrix2=tf.constant([[2],
                     [2]])

两矩阵相乘

product=tf.matmul(matrix1,matrix2) # matrix mul

Session会话控制方法一

sess=tf.Session()
result=sess.run(product)
print(result) # [[12]]
sess.close()

Session会话控制方法二

# 好处就是不需要写sess.close,因为以下代码在with语句中运行,运行完毕,自动关闭了
with tf.Session() as sess:
    result2=sess.run(product)
    print(result2) # [[12]]

2.Tensorflow使用Variable

写在前面

在 Tensorflow 中,定义了某字符串是变量,它才是变量

定义变量与常量

state=tf.Variable(0,name='counter')
print(state.name) # counter:0
one=tf.constant(1)

变量与常量做加法运算

new_value=tf.add(state,one)

更新state值

update=tf.assign(state,new_value)

变量初始化!!!

# 如果定义变量一定要用这个!
# init=tf.initialize_all_variables() 即将被废除
init=tf.global_variables_initializer()
# 注意:到这里变量还是没有被激活,需要在下面 sess 里, sess.run(init) , 激活 init

激活变量

with tf.Session() as sess:
    sess.run(init)
    for _ in range(3):
        sess.run(update)
        print(sess.run(state))

注意:直接 print(state) 不起作用!!一定要把 sess 的指针指向 state 再进行 print 才能得到想要的结果!

3.Placeholder 传入值

写在前面

'''
Tensorflow 如果想要从外部传入data, 那就需要用到 tf.placeholder(),
然后以这种形式传输数据stat.run(***,feed_dict(key:value,key1:value.....))
'''

定义两个placeholder

# 在Tensorflow中需要定义placeholder的type,一般为type32形式
input1=tf.placeholder(tf.float32)
input2=tf.placeholder(tf.float32)

mul=multiply是将input1和input2做乘法运算

output=tf.multiply(input1,input2)

外部传如data,并输出结果

with tf.Session() as sess:
    print(sess.run(output,feed_dict={input1:[2],input2:[3.0]}))

4.激励函数(activate function)

激励函数运行时激活神经网络中某一部分神经元。 将激活信息向后传入下一层的神经系统。 激励函数的实质是非线性方程。

5.定义添加神经层的函数

写在前面

定义添加神经层的函数def add_layer(),它有四个参数:
输入值、输入的大小、输出的大小和激励函数,
我们设定默认的激励函数是None

定义weights和biases

# 因为在生成初始参数时,随机变量(normal distribution)会比全部为0要好很多,所以我们这里的weights为一个in_size行, out_size列的随机变量矩阵
Weights=tf.Variable(tf.random_uniform([in_size,out_size]))
# biases的推荐值不为0,所以我们这里是在0向量的基础上又加了0.1
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)

激励函数处理

# 当activation_function——激励函数为None时,输出就是当前的预测值——Wx_plus_b,不为None时,就把Wx_plus_b传到activation_function()函数中得到输出
if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)

返回输出

return outputs

完整函数

import tensorflow as tf
# 定义添加神经层的函数
def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights=tf.Variable(tf.random_uniform([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

6.建造神经网络

导入包numpy

import numpy as np

定义添加神经层的函数

import tensorflow as tf
def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights=tf.Variable(tf.random_uniform([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

将一个有300个元素的一维数组转换成1列300行的矩阵形式(列向量)

x_data=np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]

噪点,没有按照函数走,这样看起来会更像真实情况,其中0.05表示方差

noise=np.random.normal(0,0.05,x_data.shape).astype(np.float64)
y_data=np.square(x_data)-0.5+noise

接下来,开始定义神经层。 通常神经层都包括输入层、隐藏层和输出层。这里的输入层只有一个属性, 所以我们就只有一个输入;隐藏层我们可以自己假设,这里我们假设隐藏层有10个神经元; 输出层和输入层的结构是一样的,所以我们的输出层也是只有一层。 所以,我们构建的是——输入层1个、隐藏层10个、输出层1个的神经网络。

# 定义隐藏层
l1=add_layer(xs,1,10,activation_function=tf.nn.relu)
# 定义输出层
predition=add_layer(l1,10,1,activation_function=None)

# 计算预测值predition与真实值的误差,对两者差的平方求和再取平均
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-predition),
                   reduction_indices=[1]))
# 机器学习提升准确率
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 0.1表示学习效率

# 初始化
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})
    # 每50步我们输出一下机器学习的误差
    if i % 50 == 0:
        # to see the step improvement
        print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))

运行

7.matplotlib 可视化

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 定义添加神经层的函数
def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights=tf.Variable(tf.random_uniform([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
# 将一个有300个元素的一维数组转换成1列300行的矩阵形式(列向量)
x_data=np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]
# 噪点,没有按照函数走,这样看起来会更像真实情况,其中0.05表示方差
noise=np.random.normal(0,0.05,x_data.shape).astype(np.float64)
y_data=np.square(x_data)-0.5+noise
# 输入层1,隐藏层10,输出层1
# 这里的None代表无论输入有多少都可以,因为输入只有一个特征,所以这里是1
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# 定义隐藏层
l1=add_layer(xs,1,10,activation_function=tf.nn.relu)
# 定义输出层
prediction=add_layer(l1,10,1,activation_function=None)
# 计算预测值prediction与真实值的误差,对两者差的平方求和再取平均
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),
                   reduction_indices=[1]))
# 机器学习提升准确率
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 0.1表示学习效率
# 初始化
init=tf.global_variables_initializer()
# 激活变量
sess=tf.Session()
sess.run(init)

绘制散点图

# plot the real data
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data, y_data)
plt.ion() # 连续显示
plt.show()

显示预测数据

# 每隔50次训练刷新一次图形,用红色、宽度为5的线来显示我们的预测数据和输入之间的关系,并暂停0.1s。
for i in range(1000):
    # training
    sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
    if i % 50 == 0:
        # to visualize the result and improvement
        try:
            ax.lines.remove(lines[0])
        except Exception:
            pass
        prediction_value = sess.run(prediction, feed_dict={xs: x_data})
        # plot the prediction r-表示红色实线,lw表示线宽
        lines = ax.plot(x_data, prediction_value, 'r-', lw=5)
        plt.pause(0.1)

问题:红色实线条不显示,解决办法:取消matplotlib默认输出到sciview

取消Settings>Tools>Python Scientific>Show plots in toolwindow勾选项8.学习文章

8.学习文章

8.1.Tensorflow简介

https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/

8.2.新版pycharm中,取消matplotlib默认输出到sciview

https://blog.csdn.net/chengyu_whu/article/details/80493477

本文分享自微信公众号 - 光城(guangcity)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏暴走大数据

独孤九剑-Spark面试80连击(下)

场景描述:这是一个Spark的面试题合集。是我自己作为面试者和作为面试官都会被问到或者问到别人的问题,这个总结里面有大量参考了网上和书上各位老师、大佬的一些原文...

13130
来自专栏数据分析1480

【整理分享】14张思维导图构建 Python 核心知识体系

基础知识图一包括了基本规则、Python语言特点、计算机语言、如何运行Python、变量赋值五个方面,辅助你快速掌握Python编程的基底知识。

8930
来自专栏中科院渣渣博肆僧一枚

tf.data

返回此数据集元素的每个组件的类。(不推荐)期望值是tf.Tensor和tf.sparseTensor。

18940
来自专栏华章科技

如何在 Apache Flink 中使用 Python API?

导读:本文重点为大家介绍 Flink Python API 的现状及未来规划,主要内容包括:Apache Flink Python API 的前世今生和未来发...

84830
来自专栏网优小兵玩Python

【Python 3 列表】

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

8420
来自专栏网优小兵玩Python

【Python 3 元组】

7420
来自专栏腾讯NEXT学位

Python 工匠:高效操作文件的三个建议

◆◆ 前言 ◆◆ 在这个世界上,人们每天都在用 Python 完成着不同的工作。而文件操作,则是大家最常需要解决的任务之一。使用 Python,你可以轻松为他...

14350
来自专栏未闻Code

一日一技:在 Python 中快速遍历文件

实际上,要解决遍历文件的问题,只需要使用 Python 自带的 glob模块即可:

12220
来自专栏网优小兵玩Python

【Python 3 字典】

字典是非常有用的 Python 内建数据类型。序列是以连续的整数为索引,与此不同的是,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值...

8450
来自专栏网优小兵玩Python

Python 3 函数

函数能提高应用的模块性,和代码的重复利用率Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数。

10130

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励