1.Conv2D()
keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
参数:
filters: 整数,输出空间的维度 (即卷积中滤波器的输出数量)。
kernel_size: 一个整数,或者 2 个整数表示的元组或列表, 指明 2D 卷积窗口的宽度和高度。 可以是一个整数,为所有空间维度指定相同的值。
strides: 一个整数,或者 2 个整数表示的元组或列表, 指明卷积沿宽度和高度方向的步长。 可以是一个整数,为所有空间维度指定相同的值。 指定任何 stride 值 != 1 与指定 dilation_rate 值 != 1 两者不兼容。
padding: “valid” 或 “same” (大小写敏感)。
data_format: 字符串, channels_last (默认) 或 channels_first 之一,表示输入中维度的顺序。 channels_last 对应输入尺寸为 (batch, height, width, channels), channels_first 对应输入尺寸为 (batch, channels, height, width)。
dilation_rate: 一个整数或 2 个整数的元组或列表, 指定膨胀卷积的膨胀率。 可以是一个整数,为所有空间维度指定相同的值。 当前,指定任何 dilation_rate 值 != 1 与 指定 stride 值 != 1 两者不兼容。
activation: 要使用的激活函数 (详见 activations)。
use_bias: 布尔值,该层是否使用偏置向量。
kernel_initializer: kernel 权值矩阵的初始化器 (详见 initializers)。
bias_initializer: 偏置向量的初始化器 (详见 initializers)。
kernel_regularizer: 运用到 kernel 权值矩阵的正则化函数 (详见 regularizer)。
bias_regularizer: 运用到偏置向量的正则化函数 (详见 regularizer)。
activity_regularizer: 运用到层输出(它的激活值)的正则化函数 (详见 regularizer)。
kernel_constraint: 运用到 kernel 权值矩阵的约束函数 (详见 constraints)。
bias_constraint: 运用到偏置向量的约束函数 (详见 constraints)。
输入尺寸
如果 data_format=‘channels_first’, 输入 4D 张量,尺寸为 (samples, channels, rows, cols)。
如果 data_format=‘channels_last’, 输入 4D 张量,尺寸为 (samples, rows, cols, channels)。
输出尺寸
如果 data_format=‘channels_first’, 输出 4D 张量,尺寸为 (samples, filters, new_rows, new_cols)。
如果 data_format=‘channels_last’, 输出 4D 张量,尺寸为 (samples, new_rows, new_cols, filters)。
2.MaxPooling2D()
keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
参数:
pool_size: 整数,或者 2 个整数表示的元组, 沿(垂直,水平)方向缩小比例的因数。 (2,2)会把输入张量的两个维度都缩小一半。 如果只使用一个整数,那么两个维度都会使用同样的窗口长度。
strides: 整数,2 个整数表示的元组,或者是 None。 表示步长值。 如果是 None,那么默认值是 pool_size。
padding: “valid” 或者 “same” (区分大小写)。
data_format: 字符串,channels_last (默认)或 channels_first 之一。 表示输入各维度的顺序。 channels_last 代表尺寸是 (batch, height, width, channels) 的输入张量, 而 channels_first 代表尺寸是 (batch, channels, height, width) 的输入张量。
3.UpSampling2D()
keras.layers.UpSampling2D(size=(2, 2), data_format=None, interpolation='nearest')
参数
size: 整数,或 2 个整数的元组。 行和列的上采样因子。
data_format: 字符串, channels_last (默认) 或 channels_first 之一, 表示输入中维度的顺序。channels_last 对应输入尺寸为 (batch, height, width, channels), channels_first 对应输入尺寸为 (batch, channels, height, width)。
interpolation: 字符串,nearest 或 bilinear 之一。 注意 CNTK 暂不支持 bilinear upscaling, 以及对于 Theano,只可以使用 size=(2, 2)。
4.compile()
compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
参数:
optimizer: 字符串(优化器名)或者优化器实例。
loss: 字符串(目标函数名)或目标函数。 如果模型具有多个输出,则可以通过传递损失函数的字典或列表,在每个输出上使用不同的损失。 模型将最小化的损失值将是所有单个损失的总和。
metrics: 在训练和测试期间的模型评估标准。 通常你会使用 metrics = [‘accuracy’]。 要为多输出模型的不同输出指定不同的评估标准, 还可以传递一个字典,如 metrics = {‘output_a’:‘accuracy’}。
loss_weights: 可选的指定标量系数(Python 浮点数)的列表或字典, 用以衡量损失函数对不同的模型输出的贡献。 模型将最小化的误差值是由 loss_weights 系数加权的加权总和误差。 如果是列表,那么它应该是与模型输出相对应的 1:1 映射。 如果是张量,那么应该把输出的名称(字符串)映到标量系数。
sample_weight_mode: 如果你需要执行按时间步采样权重(2D 权重),请将其设置为 temporal。 默认为 None,为采样权重(1D)。 如果模型有多个输出,则可以通过传递 mode 的字典或列表,以在每个输出上使用不同的 sample_weight_mode。
weighted_metrics: 在训练和测试期间,由 sample_weight 或 class_weight 评估和加权的度量标准列表。
target_tensors: 默认情况下,Keras 将为模型的目标创建一个占位符,在训练过程中将使用目标数据。 相反,如果你想使用自己的目标张量(反过来说,Keras 在训练期间不会载入这些目标张量的外部 Numpy 数据), 您可以通过 target_tensors 参数指定它们。 它可以是单个张量(单输出模型),张量列表,或一个映射输出名称到目标张量的字典。
**kwargs: 当使用 Theano/CNTK 后端时,这些参数被传入 K.function。 当使用 TensorFlow 后端时,这些参数被传递到 tf.Session.run。
from keras import Input, Model
from keras.layers import Conv2D, MaxPooling2D, UpSampling2D, Concatenate
from keras.optimizers import Adam
def U_Net():
inputs=Input(shape=(256,256,3))#输入图片的尺寸
conv1=Conv2D(64,(3,3),padding='same',activation='relu',kernel_initializer='he_normal')(input)
conv1=Conv2D(64,(3,3),padding='same',activation='relu',kernel_initializer='he_normal')(conv1)
pool1=MaxPooling2D((2,2),padding='same')(conv1)
conv2=Conv2D(128,(3,3),padding='same',activation='relu',kernel_initializer='he_normal')(pool1)
conv2=Conv2D(128,(3,3),padding='same',activation='relu',kernel_initializer='he_normal')(conv2)
pool2 = MaxPooling2D((2, 2), padding='same')(conv2)
conv3 = Conv2D(256, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(pool2)
conv3 = Conv2D(256, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(conv3)
pool3 = MaxPooling2D((2, 2), padding='same')(conv3)
conv4 = Conv2D(512, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(pool3)
conv4 = Conv2D(512, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(conv4)
pool4 = MaxPooling2D((2, 2), padding='same')(conv4)
conv5 = Conv2D(1024, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(pool4)
conv5 = Conv2D(1024, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(conv5)
up6=UpSampling2D(size=(2,2))(conv5)
merge6 = Concatenate(axis=3)([conv4,up6])
conv6=Conv2D(512, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(merge6)
conv6 = Conv2D(512, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(conv6)
up7 = UpSampling2D(size=(2, 2))(conv6)
merge7 = Concatenate(axis=3)([conv3, up7])
conv7 = Conv2D(256, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(merge7)
conv7 = Conv2D(256, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(conv7)
up8 = UpSampling2D(size=(2, 2))(conv7)
merge8 = Concatenate(axis=3)([conv2, up8])
conv8 = Conv2D(128, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(merge8)
conv8 = Conv2D(128, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(conv8)
up9 = UpSampling2D(size=(2, 2))(conv8)
merge9 = Concatenate(axis=3)([conv1, up9])
conv9 = Conv2D(64, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(merge9)
conv9 = Conv2D(64, (3, 3), padding='same', activation='relu', kernel_initializer='he_normal')(conv9)
conv9 = Conv2D(2, (1, 1), padding='same', activation='sigmoid')(conv9)
model=Model(input=inputs,output=conv9)
model.compile(optimizer=Adam(lr = 1e-4), loss ='crossentropy', metrics = ['accuracy'])
return model