查看keras各种网络结构各层的名字方式

举例

base_model = ResNet50(weights=‘imagenet', include_top=True)
print(base_model.summary())

得到这个结果

补充知识:使用keras,在load_model()时,出现NameError: name '***' is not defined

是因为在构造模型是,使用了自定义的层,如Lambda()

# 文本相似度评估方式
def exponent_neg_manhattan_distance(sent_left, sent_middle, sent_right):
  '''基于曼哈顿空间距离计算两个字符串语义空间表示相似度计算'''
  return ((K.exp(-K.sum(K.abs(sent_left - sent_middle), axis=1, keepdims=True)) - K.exp(-K.sum(K.abs(sent_left - sent_right), axis=1, keepdims=True))) + 1) / 2

def bilstm_siamese_model():
  '''搭建孪生网络'''
  #可以在这里调参
  embedding_layer = Embedding(VOCAB_SIZE + 1,
                EMBEDDING_DIM,
                weights=[embedding_matrix],
                input_length=MAX_LENGTH,
                trainable=True, #原本为False
                mask_zero=True)
  #输入层
  left_input = Input(shape=(MAX_LENGTH,), dtype='float32', name="left_x") #(?, 25)
  middle_input = Input(shape=(MAX_LENGTH,), dtype='float32', name="middle_x") #(?, 25)
  right_input = Input(shape=(MAX_LENGTH,), dtype='float32', name='right_x')
  #嵌入层
  encoded_left = embedding_layer(left_input) #(?, 25, 300)
  encoded_middle = embedding_layer(middle_input) #(?, 25, 300)
  encoded_right = embedding_layer(right_input)
  # print(encoded_left)
  #孪生网络
  shared_lstm = create_base_network(input_shape=(MAX_LENGTH, EMBEDDING_DIM))
  left_output = shared_lstm(encoded_left)
  middle_output = shared_lstm(encoded_middle)
  right_output = shared_lstm(encoded_right)

  # 文本相似度评估方式
  distance = Lambda(lambda x: exponent_neg_manhattan_distance(x[0], x[1], x[2]),output_shape=lambda x: (x[0][0], 1))([left_output, middle_output, right_output]) #第二个lambda函数的输入参数不清楚,x[0][0]
  print('distance',distance)
  model = Model([left_input, middle_input, right_input], distance)
  model.compile(loss='binary_crossentropy',
         optimizer='nadam',
         metrics=['accuracy'])
  model.summary()
  return model

虽然之前已经定义好了exponent_neg_manhattan_distance(),但是在load_model()依然会报NameError: name 'exponent_neg_manhattan_distance' is not defined

解决办法:

在load_model的时候,加一个custom_objects参数就可以了,即

model = load_model(model_path,custom_objects={'exponent_neg_manhattan_distance': exponent_neg_manhattan_distance}) #对自定义层一定要说明

注:用Google搜bug比用baidu搜质量会高不少。

以上这篇查看keras各种网络结构各层的名字方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Keras 实现查看model weights .h5 文件的内容

    Keras的模型是用hdf5存储的,如果想要查看模型,keras提供了get_weights的函数可以查看: for layer in model.layers: weights = layer.get_weights() # list of numpy array 而通过hdf5模块也可以读取:hdf5的数据结构主要是File - Group - Dataset三级,具体操作API可以看官方文档.weights的tensor保存在Dataset的value中,而每一集都会有attrs保存各网络

  • 关于keras中keras.layers.merge的用法说明

    旧版本中: from keras.layers import merge merge6 = merge([layer1,layer2], mode = 'concat', concat_axis = 3) 新版本中: from keras.layers.merge import concatenate merge = concatenate([layer1, layer2], axis=3) 补充知识:keras输入数据的方法:model.fit和model.fit_generator 1.第一

  • 使用keras根据层名称来初始化网络

    keras根据层名称来初始化网络 def get_model(input_shape1=[75, 75, 3], input_shape2=[1], weights=None): bn_model = 0 trainable = True # kernel_regularizer = regularizers.l2(1e-4) kernel_regularizer = None activation = 'relu' img_input = Input(shape=input_shape1) a

  • keras小技巧——获取某一个网络层的输出方式

    前言: keras默认提供了如何获取某一个层的某一个节点的输出,但是没有提供如何获取某一个层的输出的接口,所以有时候我们需要获取某一个层的输出,则需要自己编写代码,但是鉴于keras高层封装的特性,编写起来实际上很简单,本文提供两种常见的方法来实现,基于上一篇文章的模型和代码: keras自定义回调函数查看训练的loss和accuracy 一.模型加载以及各个层的信息查看 从前面的定义可知,参见上一篇文章,一共定义了8个网络层,定义如下: model.add(Convolution2D(filt

  • 查看keras各种网络结构各层的名字方式

    举例 base_model = ResNet50(weights='imagenet', include_top=True) print(base_model.summary()) 得到这个结果 补充知识:使用keras,在load_model()时,出现NameError: name '***' is not defined 是因为在构造模型是,使用了自定义的层,如Lambda() # 文本相似度评估方式 def exponent_neg_manhattan_distance(sent_lef

  • 浅谈keras中的Merge层(实现层的相加、相减、相乘实例)

    [题目]keras中的Merge层(实现层的相加.相减.相乘) 详情请参考: Merge层 一.层相加 keras.layers.Add() 添加输入列表的图层. 该层接收一个相同shape列表张量,并返回它们的和,shape不变. Example import keras input1 = keras.layers.Input(shape=(16,)) x1 = keras.layers.Dense(8, activation='relu')(input1) input2 = keras.la

  • keras中的卷积层&池化层的用法

    卷积层 创建卷积层 首先导入keras中的模块 from keras.layers import Conv2D 卷积层的格式及参数: Conv2D(filters, kernel_size, strides, padding, activation='relu', input_shape) filters: 过滤器数量 kernel_size:指定卷积窗口的高和宽的数字 strides: 卷积stride,如果不指定任何值,则strides设为1 padding: 选项包括'valid'和'sa

  • keras得到每层的系数方式

    使用keras搭建好一个模型,训练好,怎么得到每层的系数呢: weights = np.array(model.get_weights()) print(weights) print(weights[0].shape) print(weights[1].shape) 这样系数就被存放到一个np中了. 补充知识:使用keras框架编写的深度模型 输出及每一层的特征可视化 使用训练好的模型进行预测的时候,为分析效果,通常需要对特征提取过程中的特征映射做可视化操作 本文以keras为例,对特征可视化操

  • 解决Keras 中加入lambda层无法正常载入模型问题

    刚刚解决了这个问题,现在记录下来 问题描述 当使用lambda层加入自定义的函数后,训练没有bug,载入保存模型则显示Nonetype has no attribute 'get' 问题解决方法: 这个问题是由于缺少config信息导致的.lambda层在载入的时候需要一个函数,当使用自定义函数时,模型无法找到这个函数,也就构建不了. m = load_model(path,custom_objects={"reduce_mean":self.reduce_mean,"sli

  • 查看keras的默认backend实现方式

    1 . 进入当前用户目录: cd ~ 2 . 查看当前目录下的文件: ls -a 3 . 找到.keras目录并进入: cd .keras 4 . 进入并查看keras.json文件: cat keras.json 5 . 可能的显示如下: {"image_dim_ordering":"tf", "epsilon": 1e-07, "floatx": "float32", "backend&quo

  • 解决Keras的自定义lambda层去reshape张量时model保存出错问题

    前几天忙着参加一个AI Challenger比赛,一直没有更新博客,忙了将近一个月的时间,也没有取得很好的成绩,不过这这段时间内的确学到了很多,就在决赛结束的前一天晚上,准备复现使用一个新的网络UPerNet的时候出现了一个很匪夷所思,莫名其妙的一个问题.谷歌很久都没有解决,最后在一个日语网站上看到了解决方法. 事后想想,这个问题在后面搭建网络的时候会很常见,但是网上却没有人提出解决办法,So, I think that's very necessary for me to note this.

  • keras打印loss对权重的导数方式

    Notes 怀疑模型梯度爆炸,想打印模型 loss 对各权重的导数看看.如果如果fit来训练的话,可以用keras.callbacks.TensorBoard实现. 但此次使用train_on_batch来训练的,用K.gradients和K.function实现. Codes 以一份 VAE 代码为例 # -*- coding: utf8 -*- import keras from keras.models import Model from keras.layers import Input

  • 使用已经得到的keras模型识别自己手写的数字方式

    环境:Python+keras,后端为Tensorflow 训练集:MNIST 对于如何训练一个识别手写数字的神经网络,网上资源十分丰富,并且能达到相当高的精度.但是很少有人涉及到如何将图片输入到网络中并让已经训练好的模型惊醒识别,下面来说说实现方法及注意事项. 首先import相关库,这里就不说了. 然后需要将训练好的模型导入,可通过该语句实现: model = load_model('cnn_model_2.h5') (cnn_model_2.h5替换为你的模型名) 之后是导入图片,需要的格

  • vue项目查看vue版本及cli版本的实现方式

    查看cli版本,执行如下: vue -V 查看vue版本 npm list vue 补充知识:vue老项目升级vue-cli3.0问题总结 升级步骤 1. 删除原vue-cli并安装vue-cli3.0 2.删除新项目中src下的内容,把原项目中src目录覆盖到新项目中 3.把router从目录文件夹改为文件,src/router/index.js提高一层变成src/router.js 4. 我的项目中src已经分为了views和components所以无需修改,如果不是这个结构需要自己区分下

随机推荐