预备知识
为了看完SRCNN的keras训练代码,罗列了一些预备知识
迭代器
凡是可迭代对象,均可被迭代。通过for循环来遍历list或tuple,这种遍历我们称为迭代(Iteration)。
迭代字典
for value in d.values():
for k, v in d.items():
迭代字符串
for ch in 'ABC':
判断是否是可迭代对象
from collections import Iterable
isinstance('abc', Iterable) # str是否可迭代
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
for语句就是获取了容器的迭代器、调用迭代器的next()方法以及对StopIteration进行处理等
容器需要遵守迭代器协议,实现__iter__,__next__
迭代器模式(Iterator pattern) 按需一次获取一个数据项。
迭代器有惰性求值的特性,它进可以在迭代至当前元素时才计算,所以非常适合遍历元素非常多的容器,而且更省内存。
generator
列表生成式
[m + n for m in 'ABC' for n in 'XYZ']
获得generator的多种方式
g = (x * x for x in range(10))
使用yeild,将函数变为generator
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
g = fib(6)
定义实现迭代器协议的类
__iter__,__next__
class Fab(object): def __init__(self, max): self.max = max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def __next__(self): if self.n < self.max: r = self.b self.a, self.b = self.b, self.a + self.b self.n = self.n + 1 return r raise StopIteration() for one in Fab(5): print(one)
常用的函数
判断是否文件
isfile(f)
读取image 范围[0,255]
from PIL import Image
image = np.asarray(Image.open(f).convert('RGB'))
图片的缩放
from scipy import misc
scaled = misc.imresize(image, 1.0/scale, 'bicubic')
对获取的文件做搅拌
random.shuffle(files)
将list转化为numpy的array
x_inputs = np.asarray(images)
定义使用keras的callback,实时监控训练的过程
使用示例
model.fit(X_train, Y_train, batch_size=128, epochs=20, verbose=0, callbacks=[history])
继承keras.callbacks.Callback
ModelCheckpoint
该回调函数将在每个epoch后保存模型到filepath
EarlyStopping
当监测值不再改善时,该回调函数将中止训练
TensorBoard
可视化的展示器
该回调函数将日志信息写入TensorBorad,使得你可以动态的观察训练和测试指标的图像以及不同层的激活值直方图
可以继承Callback自定义类,有以下函数可以override
def on_epoch_begin(self, epoch, logs=None):
pass
def on_epoch_end(self, epoch, logs=None):
pass
def on_batch_begin(self, batch, logs=None):
pass
def on_batch_end(self, batch, logs=None):
pass
...