keras 获取某层的输入/输出 tensor 尺寸操作

获取单输入尺寸,该层只被使用了一次。

import keras
from keras.layers import Input, LSTM, Dense, Conv2D
from keras.models import Model
a = Input(shape=(32, 32, 3))
b = Input(shape=(64, 64, 3))

conv = Conv2D(16, (3, 3), padding='same')
conved_a = conv(a)

# 到目前为止只有一个输入,以下可行:
assert conv.input_shape == (None, 32, 32, 3)

如果该层被使用了两次

import keras
from keras.layers import Input, LSTM, Dense, Conv2D
from keras.models import Model
a = Input(shape=(32, 32, 3))
b = Input(shape=(64, 64, 3))

conv = Conv2D(16, (3, 3), padding='same')
conved_a = conv(a)

# 到目前为止只有一个输入,以下可行:
assert conv.input_shape == (None, 32, 32, 3)

conved_b = conv(b)
# 现在 `.input_shape` 属性不可行,但是这样可以:
assert conv.get_input_shape_at(0) == (None, 32, 32, 3)
assert conv.get_input_shape_at(1) == (None, 64, 64, 3)

如果是输出,只需要改成output就好:

import keras
from keras.layers import Input, LSTM, Dense, Conv2D
from keras.models import Model
a = Input(shape=(32, 32, 3))
b = Input(shape=(64, 64, 3))

conv = Conv2D(16, (3, 3), padding='same')
conved_a = conv(a)

# 到目前为止只有一个输入,以下可行:
assert conv.input_shape == (None, 32, 32, 3)

conved_b = conv(b)
# 就改了output,当然尺寸我也改了
assert conv.get_output_shape_at(0) == (None, 32, 32, 16)
assert conv.get_output_shape_at(1) == (None, 64, 64, 16)

补充知识:keras中获取shape的正确方法

在keras的网络中,如果用layer_name.shape的方式获取shape信息将会返还tensorflow.python.framework.tensor_shape.TensorShape其中包含的是tensorflow.python.framework.tensor_shape.Dimension

正确的方式是使用

import keras.backend as K
K.int_shape(laye_name)

以上这篇keras 获取某层的输入/输出 tensor 尺寸操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Keras—embedding嵌入层的用法详解

    最近在工作中进行了NLP的内容,使用的还是Keras中embedding的词嵌入来做的. Keras中embedding层做一下介绍. 中文文档地址:https://keras.io/zh/layers/embeddings/ 参数如下: 其中参数重点有input_dim,output_dim,非必选参数input_length. 初始化方法参数设置后面会单独总结一下. demo使用预训练(使用百度百科(word2vec)的语料库)参考 embedding使用的demo参考: def creat

  • 在keras 中获取张量 tensor 的维度大小实例

    在进行keras 网络计算时,有时候需要获取输入张量的维度来定义自己的层.但是由于keras是一个封闭的接口.因此在调用由于是张量不能直接用numpy 里的A.shape().这样的形式来获取.这里需要调用一下keras 作为后端的方式来获取.当我们想要操作时第一时间就想到直接用 shape ()函数.其实keras 中真的有shape()这个函数. shape(x)返回一个张量的符号shape,符号shape的意思是返回值本身也是一个tensor, 示例: >>> from keras

  • keras 使用Lambda 快速新建层 添加多个参数操作

    keras许多简单操作,都需要新建一个层,使用Lambda可以很好完成需求. # 额外参数 def normal_reshape(x, shape): return K.reshape(x,shape) output = Lambda(normal_reshape, arguments={'shape':(-1, image_seq, 1000)})(output) output = Lambda(lambda inp: K.mean(inp, axis=1), output_shape=(10

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

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

  • Keras框架中的epoch、bacth、batch size、iteration使用介绍

    1.epoch Keras官方文档中给出的解释是:"简单说,epochs指的就是训练过程接中数据将被"轮"多少次" (1)释义: 训练过程中当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个epoch,网络会在每个epoch结束时报告关于模型学习进度的调试信息. (2)为什么要训练多个epoch,即数据要被"轮"多次 在神经网络中传递完整的数据集一次是不够的,对于有限的数据集(是在批梯度下降情况下),使用一个迭代过程,更新权重一

  • keras 获取某层的输入/输出 tensor 尺寸操作

    获取单输入尺寸,该层只被使用了一次. import keras from keras.layers import Input, LSTM, Dense, Conv2D from keras.models import Model a = Input(shape=(32, 32, 3)) b = Input(shape=(64, 64, 3)) conv = Conv2D(16, (3, 3), padding='same') conved_a = conv(a) # 到目前为止只有一个输入,以下

  • keras 获取某层输出 获取复用层的多次输出实例

    官方文档很全面,搜索功能也很好.但是如果你想单独实现某个功能,根本无从搜寻.于是我写了这个笔记.从功能出发. 两个tensor经过一个layer实例会产生两个输出. a = Input(shape=(280, 256)) b = Input(shape=(280, 256)) lstm = LSTM(32) encoded_a = lstm(a) encoded_b = lstm(b) lstm.output 这个代码有错误,因为最后一行没有指定lstm这个layer实例的那个输出. >> A

  • keras 自定义loss层+接受输入实例

    loss函数如何接受输入值 keras封装的比较厉害,官网给的例子写的云里雾里, 在stackoverflow找到了答案 You can wrap the loss function as a inner function and pass your input tensor to it (as commonly done when passing additional arguments to the loss function). def custom_loss_wrapper(input_

  • keras slice layer 层实现方式

    注意的地方: keras中每层的输入输出的tensor是张量, 比如Tensor shape是(N, H, W, C), 对于tf后台, channels_last Define a slice layer using Lamda layer def slice(x, h1, h2, w1, w2): """ Define a tensor slice function """ return x[:, h1:h2, w1:w2, :] 定义完sl

  • 解决keras加入lambda层时shape的问题

    使用keras时,加入keras的lambda层以实现自己定义的操作.但是,发现操作结果的shape信息有问题. 我的后端是theano,使用了sum操作. 比如输入时,shape为(32,28,28),其中32为batch大小. 此时对应的ndim应该等于3. 但是,lambda处理后结果显示_keras_shape为(32,28,28),而ndim却是2. 这导致后边各项操作都会出现问题. 此处sum函数加入参数keepdims=True即可. 此注意keras中的各种层几乎都不用去理会ba

  • keras K.function获取某层的输出操作

    如下所示: from keras import backend as K from keras.models import load_model models = load_model('models.hdf5') image=r'image.png' images=cv2.imread(r'image.png') image_arr = process_image(image, (224, 224, 3)) image_arr = np.expand_dims(image_arr, axis=

  • pytorch获取vgg16-feature层输出的例子

    实际应用时可能比较想获取VGG中间层的输出, 那么就可以如下操作: import numpy as np import torch from torchvision import models from torch.autograd import Variable import torchvision.transforms as transforms class CNNShow(): def __init__(self, model): self.model = model self.model

  • keras获得某一层或者某层权重的输出实例

    一个例子: print("Loading vgg19 weights...") vgg_model = VGG19(include_top=False, weights='imagenet') from_vgg = dict() # 因为模型定义中的layer的名字与原始vgg名字不同,所以需要调整 from_vgg['conv1_1'] = 'block1_conv1' from_vgg['conv1_2'] = 'block1_conv2' from_vgg['conv2_1']

  • Keras 数据增强ImageDataGenerator多输入多输出实例

    我就废话不多说了,大家还是直接看代码吧~ import os os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"]="" import sys import gc import time import cv2 import random import numpy as np import pandas as pd impo

随机推荐