一.layers_utils.py
1.ReflectionPadding2D():该层可以添加行、列或零在图像张量的顶部、底部、左侧和右侧。整数:相同的对称填充应用于宽度和高度。两个整数的元组:解释为两个不同的高度和宽度的对称填充值。数据形式为字符串,默认是 channels_last 。输入四维张量
2.spatial_reflection_2d_padding(x, padding=((1, 1), (1, 1)), data_format=None):填充四维向量的第二第三维度,返回tf张量 tf.pad(x, pattern, "REFLECT")。padding整数张量【秩,2】。如果模型是reflect,填充[D,0],[D,1]
。其中加判断数据格式是否是data-format的语句,first\last\none。
assert len() 断言函数
assert
语句用来声明某个条件是真的,当assert语句失败的时候,会引发一AssertionError.
3.
class ReflectionPadding2D(Layer)
(1)python 中可变参数的两种形式,并且 *args(元组)必须放在 **kwargs( keyword arguments 的缩写) 的前面,因为位置参数在关键字参数的前面. **kwargs将一个可变的关键字参数的字典传给函数实参,同样参数列表长度可以为0或为其他值。
(2)hasattr() 函数用于判断对象是否包含对应的属性,
hasattr(object, name) name -- 字符串,属性名。
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。sinstance() 会认为子类是一种父类类型,考虑继承关系。InputSpec
: 确定层的ndim,dtype,shape,每一层都应有一个input_spec属性,保存InputSpec的实例的list(每一个输入tensor都对应一个)
(3)def compute_output_shape(self, input_shape):
if self.data_format == 'channels_first':
elif self.data_format == 'channels_last':
def call() 为了将类的实例对象变为可调用对象(相当于重载()运算符),此处返回输入,填充以及数据格式
二.losses.py
1.
def l1_loss(y_true, y_pred)返回真实与生成数据的差的绝对值的均值
def perceptual_loss_100(y_true, y_pred):
def perceptual_loss(y_true, y_pred):
vgg = VGG16(include_top=False, weights='imagenet', input_shape=image_shape)
其中 def VGG16(include_top=True, weights='imagenet',input_tensor=None, input_shape=None, pooling=None, classes=1000)
include_top:是否在网络顶端包括3全连接层; weights: 随机初始化,ImageNet的预训练或者加载权重文件的路径; pooling:特征提取可选的池化模式,当
include_top时false时,pooling=none意味着模型的输出是最后一个卷积层的4D张量输出;pooling=avg意味着全局平均池化应用在最后一个卷积层的输出,此时模型的输出是一个二维张量;pooling=max时意味着全局最大池化。 classes: 当 include_top= true的时候以及权重参数没有明确指定的时候,classes指图像分类的类数。
def wasserstein_loss():
def gradient_penalty_loss(self, y_true, y_pred, averaged_samples):
三.,model.py
feature map该层卷积核的个数,随着网络加深,此数成倍增加。卷积网络在学习过程中保持了图像的空间结构,也就是说最后一层的激活值(feature map)总和原始图像具有空间上的对应关系
def generator_model(): 目前的版本 ResNet block,下采样两次 卷积核7*7
def discriminator_model(): 3层,不使用sigmoid 卷积核4*4 LeakyReLU(0.2)
四.utils.py
图片文件夹,目录排序,加载图片,预处理以及恢复图片,写log
五.train.py
def save_all_weights(d, g, epoch_number, current_loss): 保存所有权重包括迭代数 ,当前损失
六、deblur_image.py
def deblur(weight_path, input_dir, output_dir):去模糊类 权重路径,输入路径,输出路径.由权重路径加载权重,处理输入目录的图片:
x_test = image
generated_images = g.predict(x=x_test)#predict函数用来针对输入样本产生预测的输出,批计算,返回预测的numpy数组
batch_size:整数 如果没有指定,默认值32; verbose:冗长的 冗长模型0或1
join():将序列中的元素以指定的字符连接生成一个新的字符串。
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
np.array():列表中数据转换为矩阵或者张量
对象:array_like;order参数指定阵列的内存布局;subok = True时, 子类将通过。否则, 返回的数组将强制为基类数组(默认);
ndmin:int(可选)此参数指定结果数组应具有的最小维数。用户可以根据需要预先设置形状, 以满足该要求。[::i] 是Python中的基础索引,而[:,:,i]是Numpy 中对于多维度 Array的提取
concatenate(arrays, axis=None, out=None):连接函数。其中数组必须有同样的形状,如果axis轴为无,则阵列在使用前将展开,默认值为0。