Tensorflow进阶
张量合并1.拼接
2.堆叠
无论哪种方式,相应维度必须一致
分割合并的逆过程
将1个张量拆成多个张量
1. split等份分割
不等份分割传入列表,表示分割后每一部分的长度
2. unstack
可以看出,stack是在合并张量时增加了维度,而unstack是在分割张量时减少了维度
【注意】unstack一定会将原张量按照axis指定的维度方向分割成全部的部分的长度都是1的张量,因为只有这样才能将shape中为1的维度方向去掉
范数主要使用L1范数、L2范数和无穷范数
常用统计量最值:tf.reduce_max、tf.reduce_min
均值:tf.reduce_mean
和:tf.reduce_sum
指定axis
不指定axis此时会对全局求解:
应用场景求解所有样本的平均误差:
在分类问题中,求解概率最大值所在下标,即label假设有两个样本,做10分类问题
使用tf.reduce_max只能求解最大值,而使用tf.argmax可以求解最大值所在索引号(下标)
所以,这两个样本所属类别分别为8和9
张量比较还是拿10分类的栗子,假设有100个样本
开始比较
计 ...
Tensorflow基础
Tensor是什么
张量的维度也称作轴 (Axis)
一般把标量、向量、矩阵也统称为张量
TF中的数据类型数值,布尔,字符串
1.数值类型
在tf中创建标量
使用.numpy可以返回Numpy.array类型的数据
在tf中创建向量
此时,必须使用List容器传值
在tf中创建矩阵
在tf中创建三维张量
2.字符串类型
不怎么用,Python内置的字符串方法已经足够
3.布尔类型
tf的布尔类型和Python内置的布尔类型不等价
类型转换numpy ==> tensor
一般的,使用cast函数可完成不同数据类型,数据精度之间的转换
int ==> bool
bool ==> int
待优化的张量对于一些需要训练优化的参数,可设置tf.Variable类型
比如神经网络中,输入的X不需要包装成该类型,而w和b需要
name和trainable是Variable特有的属性
创建张量从数组,列表中创建convert_to_tensor和constant作用一样,都是创建张量
创建全0或全1的张量标量
向量
矩阵
可以使用 ...
分支循环,效率加速器-Python基础连载(八)
开篇你可能已经发现,前面的七期内容有一个共同的特点,那就是偏向理论基础,似乎学完之后只是了解了一些实用的方法,比如字符串如何进行增删改查,如何交互实现输入输出,Python运算符的种类等等。
此刻的你,是不是一点也没有感受到程序带来的效率翻倍?
今天就来填补这个大坑,一起来学习分支和循环吧!
分支所谓分支,可以形象的理解为一棵树的分叉:
满足哪个条件,就往哪个分叉方向前进。
写成Python伪代码的格式如下:
这便是最简单的分支结构:if...else...
还记得之前讲的缩进吗?在这里,:之后按回车键就会自动缩进了,一个缩进相当于按一次Tab键
缩进的存在,使得Python代码的可读性更强。
再举两个栗子来练习一下,建议小白同学手动敲一遍:
【栗子1】数字比较
123456x=1y=2if x>y: print('x比y大!')else: print('x比y小!')
输出:
1x比y小!
【栗子2】年龄验证
1234567age=input('请输入你的年龄:')age=int(age)#input输 ...
小小运算符,构筑大世界-Python基础连载(七)
开篇本期将介绍Python的运算符。
在正式开始之前,应该给运算符下个教科书式定义:
1运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算(百度百科)
好吧,这定义越看越晕。不管他了,咱们直接开始,在实际操作中理解运算符!
需要注意的是,你如果见到x=x+1这种操作,千万不要把这与数学上的操作混为一谈。
前面也提起过,在数学上,x=x+1中的=是等于的意思,而在编程语言中,=是赋值的意思,将=右边的值赋值给=左边。
所以,x=x+1在数学上是不成立的,但是在编程语言中,是将变量x做了加1的操作。
算数运算符1. + :加法运算
2. -:减法运算
3. *:乘法运算
4. / :普通除法运算
5. // :整数除法(整除)运算
6. ** :平方运算,a**b代表求a的b次方
7. % :取余运算
上个栗子:
12345678>>> 1+12>>> 1-10>>> 1*22>>> 3/21.5>>> 3//21>>> 2**3#求2的3次方8>>> ...
跳动的数字,熟悉又陌生-Python基础连载(六)
开篇经过前面与字符串的相爱相杀,相信你已经初步掌握了字符串的基本用法。本期将开始学习一个新的数据类型:数字。
在初高中,你已经学习了整数,小数,复数,这些包含在今天要讲的Python的数字类型中,正如上图所示(注:在这里你可以先把浮点数理解成小数,这对于之后的编程几乎没有影响,但随着学习的深入,你可能会发现这种理解是片面的)。
下面来逐个击破~
int & float这两种类型不用多说,你已经与它们打了多年的交道了。
还记得之前讲过的type()函数吗?它可以用来查看一个变量所属的数据类型。
嗯,意料之中。
在一些其他编程语言,如C语言中,\代表的是整除,比如3/2=1而不是1.5。
以前的Python2也这样干过,但是在Python3中(本系列教程一直在用的Python版本是Python3,还记得第一期的环境搭建内容吗?),这一规则被更改了,更改后的规则也许更符合大众的逻辑:
\代表我们所认知的普通除法,\\代表整除。
上个栗子:
bool布尔类型(bool)只有两种取值,True和False
你可能产生疑惑,这是哪门子数字类型啊?这不是英文单词吗!
首先用一个栗子反驳 ...
输入输出,字符串如影随形-Python基础连载(五)
开篇前面两期详细的介绍了字符串及其相关操作,在今后的编程中,你将经常和字符串打交道。一个比较常见的场景就是输入输出,所以本期将结合字符串,讲述最基本同时也是最常用的输入输出语法(input和print),并且会在文章最后补充一些之前没有讲到的字符串的内容。
input()用于接收用户的输入input()用于接受用户的输入。
1>>> input()
当你写入以上代码,并按下回车键后,你会发现光标在闪动,这是在提示你要输入一些东西。
当输入完成后,再按一次回车,你所输入的东西便会打印出来显示在屏幕上,就像下面这样:
图中,黑色的字是我输入的,蓝色的字是打印输出在屏幕上的。
那如果不想打印输出在屏幕上,而是想将输入的内容保存起来,又应该怎么做呢?
简单!只要用一个变量接收input()的输入内容就搞定啦!
这样,输入的内容就被保存在变量x中了。
细心的你或许已经发现了,蓝色的字被一对''包裹着,这不正是之前学习的字符串类型吗?
没错!事实上,你输入input()中的任何类型的数据,都会变成字符串类型。
你可能不太信,因为上面的栗子中,我输入的内容我 ...
纵经千万次增删改,初心永不变-Python基础连载(四)
开篇上一期介绍了字符串及其切片用法,相信你已经掌握。
那么这一期,我们就来学习一下字符串的增删改查等一系列方法,正是因为有了这些方法,你才能像呼吸一样自然地操作字符串。
需要指出的是,字符串是不可变类型,也就是说,只要一个字符串确定了,那么任何操作都不能修改该字符串。
此时的你,可能会很疑惑:既然字符串是不可变类型,那何来增删改这些操作呢?
解答这个问题的过程涉及到了内存,下面我将用画图的方式解释:
将内存看作一个大房子,房子中有许多小房间(地址单元),将它们分别编号为0,1,2,3。
在运行s='great'这一句代码时,会给变量s分配一个房间,假设分配的房间号是0:
现在,我想要修改变量s中的内容,由great改成gre!。由于字符串是不可变数据类型,所以不能直接在变量s所在的小房间(地址单元)内进行修改。
正确的做法是新开一个小房间,假如新开的小房间是1号,则首先会将s的前3个字符复制到房间1(这里用到了切片,你还记得吗),然后在后面加一个!。这样,房间1内所保存的就是我们想要的结果了。
以上文字描述过程对应代码如下:
1234>>> s=& ...
切片,灵活的字符串-Python基础连载(三)
开篇之前已经提到过,在Python中,一共有六大数据类型
本期就开始学习Python的六个标准数据类型中的字符串。
什么是字符串在Python中,字符串是用一对引号(单引号/双引号均可)包裹起来的一串字符,比如之前你见到的'Hello World !'便是一个字符串。
下面再给出几个字符串的栗子:
Python提供了type()函数用于查询某个变量的数据类型,在上图中,数据类型名字后面的英文就是该数据类型所对应的type()函数返回值,()内填写的是你要查看的变量名。
接着上面的栗子,现在我要查看一下这些变量所保存元素的数据类型(不能你说是字符串就是字符串吧,我要亲自动手验证一下,嘿嘿)
验证完毕,返回值是*str*,是字符串无误!
注意,一个单个的字符也是字符串:
123>>> ch='u'>>> type(ch)<class 'str'>
你可能会好奇,这里出现的函数,返回值和class是什么鬼。不要着急,后面会讲到,现在你只要会用type()来查看一个变量的数据类型就达 ...
变量,注释,缩进,细数Python优雅风-Python基础连载(二)
开篇在之后的几期文章中,你将会陆续学习到Python的六个标准数据类型
不过在此之前,有一些先导内容需要掌握,所以这一期就先来介绍一下这些内容。
Python中的变量所谓变量,顾名思义,就是“会变化的量”。
在Python中,你可以把变量当作一个袋子,袋子里面可以装水果,可以装手机,也可以装书籍。
现在,将数字1装入一个叫做x的袋子,可以这样写:
1x=1
这一句代码的作用就是定义了一个变量,名字叫做x,同时将数字1赋值给变量x。用上面的袋子的例子来解释,就是将数字1装入了袋子x,就像下图这样
(【注】在Python中,=是赋值号,用于将*=*右边的值赋值给*=*左边的变量,并不是数学中的等于号。)
当你不想让这个袋子x装数字1,而是想装入一个新的数字2时,可以直接这样写
1x=2
此时,袋子x中所存放的,就只有数字2了,如下图所示
装入新的数字2的过程,就相当于修改变量内容的过程,这里就体现了变量中的变。
【下面这一段属于扩展知识,目前仅作了解即可,在之后会有详细讲解】你可能会疑惑,之前的数字1去哪了?其实,数字1被新来的数字2给覆盖掉了,变量x是保存的始终是最新的值。这里 ...
一切都要从搭建环境说起-Python基础连载(一)
开篇在使用Python进行编程之前,首先需要搭建Python环境。如果你是第一次接触搭建Python环境这个名词,不用担心,这个过程非常简单,你只要跟着后面的环境搭建步骤一步一步的操作就可以了。
为什么需要搭建环境温馨提示:这一部分属于扩展的知识,与环境搭建部分是独立的,对于非计算机专业的同学来说,看不太懂也没关系,直接跳转到下一部分阅读也无妨哦
在介绍环境搭建步骤之前,还是简要说一下为什么需要搭建环境。
计算机所能识别的,其实只有两个数字,即二进制中的0和1,由0和1的各种组合编写出来的代码被称为二进制代码,一组有意义的二进制代码构成了一条指令,这条指令被称为机器语言的一条语句。
面对机器语言中一堆堆的0和1,不管是读还是写都很让人头大,于是有人在机器语言的基础上,编写了一些指令,用于替代机器语言中一堆堆的0和1,这样便形成了汇编语言。汇编语言的每条指令与机器语言所实现的某一个功能是一一对应的,但缺点也很明显:符号繁多、无可移植性。
于是前辈们为了能”偷懒”,又开始了进一步的探索。
终于,高级语言问世了!
包括Python在内的一些编程语言,比如C,C++等,它们都有一个共同的特性, ...