标签: keras-layer

具有对角权重矩阵的自定义层

我想实现一个带有稀疏输入层的分类器。我的数据有大约 60 个维度,我想检查特征重要性。为此,我希望第一层具有对角权重矩阵(我想对其应用 L1 核正则化器),所有非对角线都应该是不可训练的零。因此,每个输入通道一对一连接,密集层将混合输入变量。我检查了在 NN 中指定连接(在 keras 中)层之间的自定义连接 Keras。后一个我不能使用,因为 Lambda 层不引入可训练的权重。

然而,这样的事情不会影响实际的权重矩阵:

class MyLayer(Layer):
def __init__(self, output_dim,connection, **kwargs):
    self.output_dim = output_dim
    self.connection=connection
    super(MyLayer, self).__init__(**kwargs)

def build(self, input_shape):
    # Create a trainable weight variable for this layer.
    self.kernel = self.add_weight(name='kernel', 
                                  shape=(input_shape[1], self.output_dim),
                                  initializer='uniform',
                                  trainable=True)
    self.kernel=tf.linalg.tensor_diag_part(self.kernel)
    self.kernel=tf.linalg.tensor_diag(self.kernel)
    super(MyLayer, self).build(input_shape)  # Be sure to call this at the end

def call(self, x):
    return K.dot(x, self.kernel)

def compute_output_shape(self, input_shape):
    return (input_shape[0], self.output_dim)
Run Code Online (Sandbox Code Playgroud)

当我训练模型并打印权重时,我没有得到第一层的对角矩阵。

我究竟做错了什么?

python keras tensorflow keras-layer

1
推荐指数
1
解决办法
1426
查看次数

不包括顶层调用 Keras 预训练模型的区别

调用包含或不包含模型顶层的 VGG16 模型有什么区别?我想知道,为什么在不包括顶层的情况下调用模型时,模型摘要中没有显示层的输入参数。我通过以下两种方式使用了 VGG16 模型:

from keras.applications import vgg16
model = vgg16.VGG16(weights='imagenet', include_top=False)
print(model.summary)
Run Code Online (Sandbox Code Playgroud)

模型中层的形状不显示任何输入即(无,无,无,64),请参见下文

Layer (type)                 Output Shape              Param 
===================================================================   
block1_conv1 (Conv2D)        (None, None, None, 64)    1792      
block1_conv2 (Conv2D)        (None, None, None, 64)    36928     
block1_pool (MaxPooling2D)   (None, None, None, 64)    0         
Run Code Online (Sandbox Code Playgroud)

但是,以下代码返回输入参数

from keras.applications import vgg16
model = vgg16.VGG16()
print(model.summary)
Run Code Online (Sandbox Code Playgroud)

层的形状,在这种情况下,返回输入参数

Layer (type)                 Output Shape              Param   
==================================================================   
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
block1_pool (MaxPooling2D)   (None, 112, 112, 64)       0    
Run Code Online (Sandbox Code Playgroud)

我试图理解为什么会这样,请发表评论

keras tensorflow keras-layer keras-2

1
推荐指数
1
解决办法
1370
查看次数

我可以在 Keras 密集层上使用 3D 输入吗?

作为练习,我只需要使用密集层来执行文本分类。我想利用词嵌入,问题是数据集是 3D 的(样本、句子的词、嵌入维度)。我可以将 3D 数据集输入密集层吗?

谢谢

text-classification keras word-embedding keras-layer natural-language-processing

1
推荐指数
1
解决办法
3170
查看次数

自定义池化层 - minmax pooling - Keras - Tensorflow

我想定义我的自定义池化层,而不是像 MaxPooling 层那样返回最大值,它会输出 k 个最大值和 k 个最小值。

我使用 Tensorflow 作为后端。我需要对输出向量进行排序。

我正在考虑这样做:

from keras.layers.pooling import _Pooling1D

class MinMaxPooling1D(_Pooling1D):

    def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        super(MinMaxPooling1D, self).__init__(**kwargs)

    def _pooling_function(self, inputs, **kwargs):
        sorted_ = tf.contrib.framework.sort(inputs, axis = -1)
        print(sorted_)
        return np.concatenate((sorted_[:,:,:self.output_dim/2], sorted_[:,:,-self.output_dim/2:]))
Run Code Online (Sandbox Code Playgroud)

但后来我得到:

Tensor("min_max_pooling1d_1/sort/Neg_1:0", shape=(?, 1, 1, ?), dtype=float32)
ValueError: zero-dimensional arrays cannot be concatenated
Run Code Online (Sandbox Code Playgroud)

MinMaxPooling1D 层应用于 (None, 1, 10) 形状输出。

我当时正在考虑在 MinMaxPooling1D 之前添加一个 Flatten 层,但随后有一个维度问题:

ValueError: Input 0 is incompatible with layer min_max_pooling1d_5: expected ndim=3, found ndim=2
Run Code Online (Sandbox Code Playgroud)

keras tensorflow keras-layer max-pooling

1
推荐指数
2
解决办法
2612
查看次数

加载模型 Raise ValueError 未知损失函数

这是我尝试保存并加载模型后的代码:

model.save('path_to_my_model.h5')
del model
model = tf.keras.models.load_model('path_to_my_model.h5', custom_objects={'Wraparound2D': Wraparound2D})

import tensorflow.keras.backend as K

inp = model.input                                           # input placeholder
outputs = [layer.output for layer in model.layers]          # all layer outputs
functor = K.function(inp, outputs)   # evaluation function

layer_outs = functor([X_test, 1.])



# Plot activations of different neurons in different layers 
all_layer_activations = list()

min_max_scaler = lambda x : (x - np.min(x))/(np.max(x) - np.min(x))
# min_max_scaler = lambda x : (x - np.mean(x))
for j in range(1, 5):
    if j==1:
        layer_im …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow keras-layer tf.keras keras-lambda

1
推荐指数
1
解决办法
2472
查看次数

为什么 Keras Lambda 层会导致 Mask_RCNN 出现问题?

我使用的是从这个回购协议Mask_RCNN包:https://github.com/matterport/Mask_RCNN

我尝试使用这个包训练我自己的数据集,但它在开始时给了我一个错误。

2020-11-30 12:13:16.577252: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcuda.so.1
2020-11-30 12:13:16.587017: E tensorflow/stream_executor/cuda/cuda_driver.cc:314] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2020-11-30 12:13:16.587075: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (7612ade969e5): /proc/driver/nvidia/version does not exist
2020-11-30 12:13:16.587479: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild …
Run Code Online (Sandbox Code Playgroud)

machine-learning keras tensorflow keras-layer

1
推荐指数
1
解决办法
2016
查看次数

tensorflow.keras.layers:导入错误:无法导入名称“CuDNNLSTM”

我尝试从tensorflow.keras.layers导入 CuDnnLSTM以提高训练速度,但出现此错误。我知道 Keras 2.0.8 和 python 3.5 的用户也提出了类似的问题。

我的配置是tensorflow版本2.0.0-beta1和Python 3.6.10。

这就是我尝试过的: from tensorflow.keras.layers import CuDNNLSTM

我收到此错误, ImportError:无法导入名称“CuDNNLSTM”

请问有人知道如何修复此错误吗?提前致谢!

python-3.x deep-learning tensorflow recurrent-neural-network keras-layer

1
推荐指数
1
解决办法
6747
查看次数

无法导入 keras.initializers

我已将所有必要的模块从 keras 导入 jupyter notebook

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Embedding, Dense, Dropout, Reshape, Merge, 
BatchNormalization, TimeDistributed, Lambda, Activation, LSTM, Flatten, 
Convolution1D, GRU, MaxPooling1D
from keras.regularizers import l2
from keras.callbacks import Callback, ModelCheckpoint, EarlyStopping
from keras import initializers
from keras import backend as K
from keras.optimizers import SGD
Run Code Online (Sandbox Code Playgroud)

但收到错误信息

ImportErrorTraceback (most recent call last)
<ipython-input-104-b13df7676198> in <module>()
 16 from keras.regularizers import l2
 17 from keras.callbacks import Callback, ModelCheckpoint, EarlyStopping
---> …
Run Code Online (Sandbox Code Playgroud)

python-import importerror keras keras-layer

0
推荐指数
1
解决办法
8220
查看次数

扁平化在keras的顺序模型中做什么

我正在用顺序模型研究keras。

model = Sequential()
model.add(Embedding(max_features, 128, input_length=text_max_words))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)

Flatten在这里做什么?

flatten neural-network keras keras-layer

0
推荐指数
1
解决办法
1746
查看次数

我如何使用 keras 创建 3d 输入/3d 输出卷积模型?

我有一个我无法解决的问题。

我想将具有完全连接的 MLP 的 CNN 模型实现到我的具有 2589 个蛋白质的蛋白质数据库。每个蛋白质有 1287 行 69 列作为输入和 1287 行和 8 列作为输出。实际上有 1287x1 的输出,但我使用了一种热编码作为类标签,以便在我的模型中使用交叉熵损失。

我也想要

如果我们认为图像我有一个 3d 矩阵 ** X_train = (2589, 1287, 69) for input** 和y_train =(2589, 1287, 8) output,我的意思是输出也是矩阵。

在我的 keras 代码下面:

model = Sequential()
model.add(Conv2D(64, kernel_size=3, activation="relu", input_shape=(X_train.shape[1],X_train.shape[2])))
model.add(Conv2D(32, kernel_size=3, activation="relu"))
model.add(Flatten())
model.add(Dense((8), activation="softmax"))
Run Code Online (Sandbox Code Playgroud)

但是我遇到了关于密集层的错误:

ValueError: Error when checking target: expected dense_1 to have 2 dimensions, but got array with shape (2589, 1287, 8)
Run Code Online (Sandbox Code Playgroud)

好的,我知道 Dense 应该采用正整数单位(Keras 文档中的解释。)。但是我如何实现矩阵输出到我的模型?

我试过了:

model.add(Dense((1287,8), activation="softmax")) …
Run Code Online (Sandbox Code Playgroud)

3d conv-neural-network keras keras-layer

0
推荐指数
1
解决办法
1973
查看次数

如何在keras.backend和keras.layers之间选择?

我发现keras.backendor 中有很多相同的名称keras.layers,例如keras.backend.concatenatekeras.layers.Concatenate。我隐约知道一个是张量,另一个是层。但是,当代码太大时,那么多函数使我感到困惑,即张量或层。有人有解决这个问题的好主意吗?

我发现的一种方法是首先在一个函数中定义所有占位符,但是该函数将其视为变量可能会在最后返回层,而另一个函数将这一层视为变量可能会返回另一个变量。

python deep-learning keras tensorflow keras-layer

0
推荐指数
1
解决办法
279
查看次数

有没有办法构建一个以指定角度随机旋转的keras预处理层?

我正在从事一个天文图像分类项目,目前正在使用 keras 构建 CNN。

我正在尝试构建一个预处理管道,以使用 keras/tensorflow 层来增强我的数据集。为了简单起见,我想实现二面体组的随机变换(即,对于方形图像,90 度旋转和翻转),但似乎tf.keras.preprocessing.image.random_rotation只允许在遵循均匀分布的连续选择范围。

我想知道是否有一种方法可以从指定度数列表中进行选择,在我的例子中是 [0, 90, 180, 270]。

keras tensorflow keras-layer image-preprocessing image-augmentation

0
推荐指数
1
解决办法
972
查看次数

我的验证损失低于训练损失,我应该摆脱正则化吗?

我听很多人谈论一些原因,但他们从未真正回答是否应该修复。我检查了数据集是否存在泄漏,并从 TFRecords 数据集中随机抽取 20% 作为验证集。我开始怀疑我的模型有太多正则化层。我是否应该减少正则化以使验证线位于训练线之上?或者这真的很重要吗?

neural-network tensorflow keras-layer dropout overfitting-underfitting

0
推荐指数
1
解决办法
6402
查看次数