matplotlib.cm的属性,各种配色方案,用于画三维图或等高线配色
小发现:
python的模块命名多用小写字母,单词的分隔用短横线实现,并不是很常用JAVA的驼峰命名
reshape()方法:
x=np.array([1,2,3,4])
y=x.reshape(1, x.size) # 把x变为行向量,但y的维度是2维!!!
x==y
array([[ True, True, True, True]])
z=np.array([1,2,3,4])
x==z
array([ True, True, True, True])
y
array([[1, 2, 3, 4]])
x
array([1, 2, 3, 4])
z
array([1, 2, 3, 4])
y.ndim
2
y.shape # 1行4列,二维
(1, 4)
x.shape # 4行1列,一维
(4,)
x.ndim
1
一个类也是个数据类型
刚改完一个历时半小时的bug,发现问题的一刹那简直了,狂喜···感动·······
果然写程序只是工作的一小部分,大部分是在改bug,维护和优化代码,改bug的过程是一个很好的学习机会,有助于清晰地理解整个程序的总体框架,跟着报错的提示信息,一条一条往上找出错地点,然后用debugger设置断点,一句一句地看代码运行,看变量和程序的逻辑是不是符合匹配,在好几个程序里跳来跳去,无数函数的深层嵌套调用后,终于定位到了原因!!!虽然一个bug的修复并不是终点,但它带来的痛苦和修复后带来的快乐简直是稀有的冰火两重天的体验····
有误原代码(很小很小的part):
def predict(self, x):
for layer in self.layers.values():
# 有序字典变量共3个键值对,affine1, relu1, affine2
x = layer.forward(x)
# x是输出层的affine2的输出,未经过softmax和损失计算
return x
改后:
def predict(self, x):
for layer in self.layers.values():
# 有序字典变量共3个键值对,affine1, relu1, affine2
x = layer.forward(x)
# x是输出层的affine2的输出,未经过softmax和损失计算
return x
看看上面的代码,我是单步调试追踪到这里突然发现这段代码没有循环执行······愣了几秒,发现输出不是NN最后一层的输出,确认没有循环,盯了几秒才发现······缩进······简直mmp······
python的缩进是非常重要的语法,它能够清晰地展现程序的层次结构,并且也是展示程序层次的唯一工具。缩进的重要性我知道,但我仍然在这上面绊倒了无数次!所以要养成好的编程习惯,随时注意自己的缩进结构对不对,不然整个程序写好了,出现bug找原因,花费的时间很多很浪费,大大降低了工作效率。