深度学习的知识点与包括调试方法python知识点一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangdashi888/article/details/81910720

1、关于一些代码块注释出现“bottleneck”的名称解释

在一些Gan网络比较常见一个词是“bottleneck”来定义其中的一段网络。其意思也叫作:瓶颈的意思。

因为Gan网络里的Generator网络一般要进行类型U-net网络的设计的。那么其中的细网络部分就可以叫做“bottleneck”,

而其中的这部分网络中的主要作用是进行特征提取,现在使用的比较多的是ResNet,所以也有人把残差学习单元叫做bottleneck

2、enumerate()函数:

 其是一个将数据对象(列表、元组、字符串)组合成一个具有索引的序列。即其同时列出数据跟数据下标。其一般用在for循环种,其是在python2.3以上版本可以用,在2.6以上版本添加了start参数。

返回值: 返回enumerate的枚举对象

实例:

seasons=['spring','summer','fall','winter']
list(enumerate(seasons))
Out[31]: [(0, 'spring'), (1, 'summer'), (2, 'fall'), (3, 'winter')]

普通的遍历元素的方法使用for方法:

In[35]: seasons=['spring','summer','fall','winter']
   ...: list(enumerate(seasons))
   ...: i=0
   ...: for element in seasons:
   ...:     print (i,element)
   ...:     i+=1
   ...:     
0 spring
1 summer
2 fall
3 winter

使用enumerate在for循环里,结果为:

In[37]: seasons=['spring','summer','fall','winter']
   ...: for i,element in enumerate(seasons):
   ...:     print (i,element)
   ...:     
0 spring
1 summer
2 fall
3 winter

3、常用的数据结构:列表

参考地址:Python3 列表

访问、更改列表中的值:

In[39]: seasons=['spring','summer','fall','winter']
   ...: print('seasons[0]:',seasons[0])
   ...: seasons[0]='hotspring'
   ...: print(seasons[0])
seasons[0]: spring
hotspring

计算列表长度、多个列表进行组合拼接、进行成员重复、元素是否存在列表里:

In[40]: seasons=['spring','summer']
In[41]: seasons1=['spring','summer']
   ...: seasons2=['fall','winter']
   ...: print(len(seasons1))
   ...: print(seasons1+seasons2)
   ...: print(seasons*4)
   ...: print('spring' in seasons1)
2
['spring', 'summer', 'fall', 'winter']
['spring', 'summer', 'spring', 'summer', 'spring', 'summer', 'spring', 'summer']
True

 注意:其中列表成员重复,在‘*’后面的值代表的是成员重复的次数

列表数据的读取种类:

In[43]: seasons1=['spring','summer','fall','winter']
   ...: print(seasons1[2]) #顺序第三个元素,其从0开始
   ...: print(seasons1[-1]) #符号表示逆序,倒数第一个元素,从-1开始
   ...: print(seasons1[1:])  #输出第二个元素开始后的所有元素
fall
winter
['summer', 'fall', 'winter']

使用python的一些函数库对列表进行操作,取元素最大值、取元素最小值、把列表转换为元组、转换为列表等函数进行操作:

In[48]: seasons=['spring','summer','fall','winter']
   ...: print(max(seasons)) #返回列表元素最大值
   ...: print(min(seasons)) #返回列表元素最小值
   ...: print(tuple(seasons)) #把列表转换为元组
   ...: print(list(seasons)) #把列表转换为列表
winter
fall
('spring', 'summer', 'fall', 'winter')
['spring', 'summer', 'fall', 'winter']

使用列表自身的内建函数来对自身进行操作:在末尾添加新对象、统计,某个元素出现的次数、找到匹配值

值的第一个元素的index、在固定位置插入一个元素、移除尾部的元素、移除列表种某个值的第一项、反向列表元素、元素复制

In[54]: seasons=['spring','summer','fall','winter']
   ...: seasons.append('hotwinter') #在尾部追加一个元素
   ...: print(seasons)
   ...: print(seasons.count('spring')) #统计某个元素的出现次数
   ...: print(seasons.index('spring')) #相匹配元素的第一次出现的index
   ...: seasons.insert(2,'coolsummer') #在固定位置插入一个元素
   ...: print(seasons)
   ...: seasons.pop(3) #移除固定位置的元素
   ...: print(seasons)
   ...: seasons.remove('winter') #移除某个值的第一项
   ...: print(seasons)
   ...: seasons.reverse() #进行元素反向
   ...: print(seasons)
   ...: seasonscopy=seasons.copy() #进行元素的复制
   ...: print(seasonscopy)
['spring', 'summer', 'fall', 'winter', 'hotwinter']
1
0
['spring', 'summer', 'coolsummer', 'fall', 'winter', 'hotwinter']
['spring', 'summer', 'coolsummer', 'winter', 'hotwinter']
['spring', 'summer', 'coolsummer', 'hotwinter']
['hotwinter', 'coolsummer', 'summer', 'spring']
['hotwinter', 'coolsummer', 'summer', 'spring']

4、常用的数据结构:元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

 这里就省略了元组的使用方法,参考地址:Python 元组

5、常用的数据类型:字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。

创建字符串很简单,只要为变量分配一个值即可。例如:

var1='Hello World!'
var2="Runoob"

python字符串格式化:

In[56]: str="我叫%s今年%d岁!"%('小明',10)
   ...: print(str)
我叫小明今年10岁!

6、使用matplotlib进行图表绘制:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np

def plot(samples):
    fg=plt.figure(figsize=(4,4))
    gs=gridspec.GridSpec(4,4)  #gridspec主要的功能是对图标的布局格式进行设定
    gs.update(wspace=0.25,hspace=0.25) #这个是设置图间的间距

    for i,sample in enumerate(samples):
        ax=plt.subplot(gs[i])  #使用subplot指明当前操作的是子图后面的所有操作都指向这个子图
        # ax.axis('off')       #关闭图标的x,y坐标显示,即没有横纵坐标标注
        # ax.set_xticklabels([]) #在DRAGAN使用的是空列表数据结构
        ax.set_yticklabels(list("ab"))  #设置y方向的标签文字,其使用的是列表数据
        ax.set_ylabel('y')  #设置y轴标签
        plt.title('plot')  #设置图表主题
        plt.imshow(sample) #这图片数据sample要先设好shape。imshow是按其shape画图的。否则需要使用sample.reshape(28,28)

listdata=[]
rows=4
cols=4
for i in range(0,3):
    for j in range(0,3):
        data=np.clip(np.random.randn(28,28),-1,-1)
        listdata.append(data)
plot(listdata)
plt.show()  #通过show()函数显示出图表
while True:
    i=0

结果图:

其中的gridspec是一个很好用的函数,其可以很简便的就设定好subplot的画图范围。

例如原先的画图代码:

ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)

ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)

ax4 = plt.subplot2grid((3, 3), (2, 0))
ax4.scatter([1, 2], [2, 2])

ax4.set_xlabel('ax4_x')

ax4.set_ylabel('ax4_y')

ax5 = plt.subplot2grid((3, 3), (2, 1))

其可以简化为另一种画图代码:

import matplotlib.pyplot as plt

import matplotlib.gridspec as gridspec

plt.figure()

gs = gridspec.GridSpec(3, 3)

ax6 = plt.subplot(gs[0, :])

ax6.plot([0,1],[1,2])

ax7 = plt.subplot(gs[1, :2])

ax8 = plt.subplot(gs[1:, 2])

ax8.plot([0,1],[0,6])

ax9 = plt.subplot(gs[-1, 0])

ax9.scatter([0,1],[0,3])

ax10 = plt.subplot(gs[-1, -2])

其两者是一样的画图效果:

import matplotlib.pyplot as plt
#其中默认的画布是1,即后面的新画布要大于1,否则会画到相同的画布上
#后面要加上,cmap='Greys_r'参数,否则其会把其变成彩色图片,这里就是变成了彩色
plt.imshow(gradients2[0][:].reshape(28,28))
#新建一个新画布,其是2.后面的所有操作都指向这个画布
fig1=plt.figure(2)
#要加cmap='Greys_r'参数的
plt.imshow(interpolates2[0][:].reshape(28,28))
#新建一个画布3,后面的所有操作都指向这个画布
fig=plt.figure(3)
#新建,cmap='Greys_r'参数的
plt.imshow(gradients2[0][:].reshape(28,28))
#把所有的画布都显示出来
plt.show()

上图代码中,标记的代码数字与下方列表数字对应。

plt.figure(1):声明一个画布,我们称之为“画布1”,后面的所有操作都是在“画布1”上进行的。

plt.subplot(211):声明一个绘图区,我们称之为“绘图区1”,由于是在“画布1”之后,所以这个绘图区将会显示在画布1上;括号内的211表示,将画布等分为两行一列的两块区域,该绘图区位于第一块区域;后面的所有绘图操作均是在这个绘图区上进行的。

plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k'):画图命令,由于是在“绘图区1”之后,所以该图将会显示在“绘图区1”上。

plt.subplot(212):声明一个新的绘图区,我们称之为“绘图区2”,由于没有声明新的画布,所以这个绘图区仍将会显示在画布1上;括号内的212表示,将画布等分为两行一列的两块区域,该绘图区位于第二块区域;后面的所有绘图操作均是在这个绘图区上进行的。

plt.plot(t2, np.cos(2*np.pi*t2), 'r--'):画图命令,由于该行代码前又声明了一个新的绘图区,所以该图将会显示在“绘图区2”上。

参考:https://blog.csdn.net/changzoe/article/details/78845756

https://baijiahao.baidu.com/s?id=1580136826936358135&wfr=spider&for=pc

7、使用控制台来进行调试python代码,和把tensor转换为array数据格式。其中启动调试方法如下:

 注意:转换tensor到array需要配合tf.Session(),否则会报错。因为新的改动。其中使用tf.Variable()返回的是Variable的一个对象。其不是一个tensor,不能直接使用eval()进行转换。以后需要先查看清除其数据类型。可以使用print(type(G_W1))来查看。

相反把array转换为tensor,使用:

with tf.Session() as session:
    print(ta.eval())
    hh=ta.eval()
    hh_tensor=tf.convert_to_tensor(hh)

猜你喜欢

转载自blog.csdn.net/yangdashi888/article/details/81910720