完全Keras Lambda混乱

2024-10-08 21:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图定义Lambda层Keras,如下所示:

首先,计算图像的小波变换,然后将其聚集在一起的函数:

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.layers import BatchNormalization
from keras.layers import Lambda
from keras import regularizers
from keras import backend as K
import pywt
import numpy as np
from keras.engine.topology import Layer

def mkwtarray(image):
    channels = K.image_data_format()
    if channels is 'channels_first':
        axbase = 1
    else:
        axbase = 0
    print(axbase)
    print(image.shape)
    (a,( b, c, d ))= pywt.dwt2(image, 'db1', axes=(axbase, axbase+1))
    ab = np.concatenate((a, b), axis=axbase)
    cd = np.concatenate((c, d), axis=axbase)
    abcd = np.concatenate((ab, cd), axis=axbase+1)
    return abcd

def wtoutshape(input_shape):
    return input_shape

train_data_dir = 'train'
validation_data_dir = 'validation'
nb_train_samples = 21558
nb_validation_samples = 3446
epochs = 30
batch_size = 32

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

model = Sequential()
model.add(Lambda(mkwtarray, input_shape=input_shape, output_shape = wtoutshape))
<more random  layers>

令我惊讶的是,当我定义模型时(意思是,评估了上面的行),它出错了,声称: 值错误:输入数组的维数小于指定的轴

另外,打印期望值0和{}的'print'语句也会被触发,这意味着函数实际上是在定义时计算的,而不是在模型实际运行的时候。很明显,我错过了一些关于Keras的Lambda功能的东西-任何启示都将被感激。在

如果你定义了一个“lambda”的层,那么这个调用本身就是一个特殊的层。在


Tags: lambdafromimageimportimginputdata定义
1条回答
网友
1楼 · 发布于 2024-10-08 21:16:37

这看起来像是NumPy和Keras的灾难性组合。让我们看看两个主要的混淆点:

  1. 一旦进入Keras模型,例如Lambda层,就要处理张量notNumPy数组。虽然它很方便,但是你不能使用任何NumPy操作,模型内部的外部库。尽管如此,张量运算符与数组非常相似,这是有充分理由的。因为这是你的第一层,你可以用NumPy对它进行预处理,然后把它传递到你的模型中,这样就可以了。

  2. 你为什么要用指纹?在Keras,Tensorflow中有两个主要步骤:1->构建计算图,2->实际运行它。所以你在构建图,你的操作被称为yes,但是它们创建了没有值的符号张量。因此,您可以打印在构建图形时可以确定的形状,但不能打印它所包含的值。

请注意,不要在计算图(模型)中混用NumPy和Tensorflow,并且在构建图的同时打印图形,以了解图形的外观,但在构建时,您不会从符号张量中获得更多信息。在

相关问题 更多 >

    热门问题