Keras学习笔记

keras & tensorflow

常规设置

修改默认的分配全部GPU内存设置

from keras import backend as K
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
K.tensorflow_backend.set_session(tf.Session(config=config))  #(定义会话,模型初始化第一步)

keras版本判断

import keras
from distutils.version import StrictVersion
# keras.__version__ 当前keras版本
if StrictVersion(keras.__version__) < StrictVersion('2.2.0'):
    
else:
    

模型定义

整体框架

###训练过程
from keras.layers import Input
# 输入层 定义模型所需要的 [输入的张量(占位?),张量的形状]
input_tensor = Input(shape=(imgSz[0],imgSz[1],self.params.NUM_CHANNELS))
input_shape = (imgSz[0],imgSz[1],self.params.NUM_CHANNELS)
# 模型逐层定义
  # backbone(一般参数设置为不可训练)
  # 自定义
  # model = Model(input, x)
  # 损失函数
  # 优化算法
  # 编译
  # return model 
#

###推理过程
from keras.layers import Input
# 输入层 定义模型所需要的 [输入的张量(占位?),张量的形状]
input_tensor = Input(shape=(imgSz[0],imgSz[1],self.params.NUM_CHANNELS))
input_shape = (imgSz[0],imgSz[1],self.params.NUM_CHANNELS)
# 模型逐层定义
  # backbone(一般参数设置为不可训练)
  # 自定义
  # model = Model(input, x)
  # return model 
  # 加载权重
#


确保正确的输入形状

import keras
from distutils.version import StrictVersion
if StrictVersion(keras.__version__) < StrictVersion('2.2.0'):
    from keras.applications.imagenet_utils import _obtain_input_shape
else:
    from keras_applications.imagenet_utils import _obtain_input_shape
input_shape = _obtain_input_shape(input_shape,
                                      default_size=224,
                                      min_size=197,
                                      data_format='channels_last',
                                      require_flatten=include_top)

输入层 [输入张量]

from keras.layers import Input
    if input_tensor is None:
        img_input = Input(shape=input_shape, name='data')
    else:
        if not K.is_keras_tensor(input_tensor):
            img_input = Input(tensor=input_tensor, shape=input_shape)
        else:
            img_input = input_tensor

中间层 2D

# 批归一化
from keras.layers import BatchNormalization
x = BatchNormalization(name='bn_data')(img_input)
# 填充padding
from keras.layers import ZeroPadding2D
x = ZeroPadding2D(padding=(3, 3))(x)
# 卷积层
from keras.layers import Conv2D
x = Conv2D(init_filters, (7, 7), strides=(2, 2), name='conv0')(x)
# 批归一化
x = BatchNormalization(name='bn0', **bn_params)(x)
# 激活函数
from keras.layers import Activation
x = Activation('relu', name='relu0')(x)
# 填充padding
x = ZeroPadding2D(padding=(1, 1))(x)
# 最大池化
from keras.layers import MaxPooling2D
x = MaxPooling2D((3, 3), strides=(2, 2), padding='valid', name='pooling0')(x)

# **全局**平均池化 
from keras.layers import GlobalAveragePooling2D
x = GlobalAveragePooling2D(name='pool1')(x)
# dense
x = Dense(classes, name='fc1')(x)

# 上采样
from keras.layers import UpSampling2D
# 反卷积
from keras.layers import Conv2DTranspose

层间操作–融合
特征求和(线性和)

from keras.layers import Add
x = Add()([x, input_tensor])
# 加减乘除等融合方式
from keras.layers import merge

特征级联

from keras.layers import Concatenate
x = Concatenate()([x, skip])

获取某一层的输出

output = backbone.layers[layersname].output
损失
优化算法
模型编译
model.compile(self.params.OPTIMIZER, loss=loss)

模型相关操作

模型打印输出

model.summary()

模型存储 回调定义

from keras.callbacks import ModelCheckpoint
checkpoint = ModelCheckpoint(filepath=self.params.CHECKPOINT_PATH, monitor='loss', verbose=0, save_best_only=False,
                                         save_weights_only=False, mode='auto', period=self.params.MODEL_SAVE_PERIOD)

模型训练

model.fit_generator(train_datagen, steps_per_epoch=int(len(train_data)/self.params.BATCH_SZ),
                            epochs=self.params.NUM_EPOCHS, callbacks=[checkpoint])

模型加载权重

model.load_weights(self.params.SINGLEVIEW_TEST_MODEL, by_name=True)

模型推理

pred = model.predict(img)[0,:,:,:]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值