1在tensorflow中:如果你想要输出等于输入,padding="SAME"即可,如果你想要输出别的尺寸的特征图,使用padding=VALID',conv2d会自动计算输出特征图大小。
2、上池化
两者的区别在于UnSampling阶段没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map,UnPooling的过程,特点是在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。
3、反卷积
反卷积的具体操作
原图输入尺寸为【1,3,3,3】对应【batch_size,channels,width,height】
反卷积tconv = nn.ConvTranspose2d(3,3,3,stride=2,padding=1)
求反卷积的输出尺寸?
第一步:对输入的特征图做插值,在原先高宽方向的每两个相邻中间插上(Stride−1)列0,如下图所示,原来的尺寸为3*3,因为stride=2,则是在相邻行(列)之间插入(2-1)行(列)0
插入后的尺寸为为:height = height+(height-1)*(stride-1),这里也就是h=3+(2-1)(3-1)=5,即插值过后的 特征图为5*5
第二步:求新的卷积核设置
新卷积核的kernel_new不变为3,stride_new恒为1,padding_new =(kernel_size - padding - 1) = 1
第三步:用新的卷积核在新的特征图上做常规的卷积,得到的结果就是逆卷积的结果。
即在5*5的特征图上执行nn.conv(1,3,3,stride = 1,padding = 1),最后输出的特征图尺寸为:(5-3+2*1)/1+1=5
反卷积核的确定
卷积核的确定方式主要有两种,一是通过双线性插值固定卷积核的参数,不随着学习过程更新;二是随机初始化,并随着学习过程更新。
4.关于ModelCheckpoint参数问题
keras.callbacks.ModelCheckpoint(filepath,
monitor='val_loss',
verbose=0,
save_best_only=False,
save_weights_only=False,
mode='auto',
period=1)
作用:
该回调函数将在每个epoch后保存模型到filepath
参数:
filename:字符串,保存模型的路径,filepath可以是格式化的字符串,里面的占位符将会被epoch值和传入on_epoch_end的logs关键字所填入。
例如:
filepath = “weights_{epoch:03d}-{val_loss:.4f}.h5”
则会生成对应epoch和验证集loss的多个文件。
monitor:需要监视的值,通常为:val_acc 或 val_loss 或 acc 或 loss
verbose:信息展示模式,0或1。为1表示输出epoch模型保存信息,默认为0表示不输出该信息,信息形如:
Epoch 00001: val_acc improved from -inf to 0.49240, saving model to /xxx/checkpoint/model_001-0.3902.h5
save_best_only:当设置为True时,将只保存在验证集上性能最好的模型
mode:‘auto’,‘min’,‘max’之一,在save_best_only=True时决定性能最佳模型的评判准则,例如,当监测值为val_acc时,模式应为max,当检测值为val_loss时,模式应为min。在auto模式下,评价准则由被监测值的名字自动推断。
save_weights_only:若设置为True,则只保存模型权重,否则将保存整个模型(包括模型结构,配置信息等)
period:CheckPoint之间的间隔的epoch数
(关于一些回调函数点击查看)
5.model.fit以及model.fit_generator区别及用法
6.(有可能错误)
1.HDF5格式文件保存的是 : Model weights
2.H5 格式文件保存的是: Model stucture 和 Model weights
3.JSON 和 YAML 格式文件保存的是: Model stucture
细节:1.drop4 = Dropout(0.5)(conv4) # 将部分隐藏层神经元丢弃,防止过于细化而引起的过拟合情况;
在concatenate中,axis=1代表列合并, axis=2代表行合并,axis=3代表层合并,这里需要特别说明一下axis=-1
的操作,可能对python不熟悉的人会不理解这里的-1是哪个维度。在pyhton中,-1代表倒数第一个,也就是说,假如你的矩阵shape=[3,4,5],那么对这个矩阵来说,axis=-1,其实也就等于axis=2。因为这是个三维矩阵,所以axis可能的取值为0,1,2,所以最后一个就是2。
3.axis是将矩阵进行分组,然后再操作。而分组则意味着可能会降维(看操作)。
待续...