我已经阅读了官方文档,但仍然无法理解TimeDistributedKeras模型中的实际作用是什么?
我不明白之间的差别TimeDistributed和TimeDistributedDense?有人会TimeDistributedDense什么时候使用?它只是为了减少训练数据集吗?它有其他好处吗?
任何人都可以用一个精确的例子来解释这两种类型的包装器有什么作用?
有人可以向我解释初始化keras lstm层时传递的激活和重复激活参数之间的区别吗?
根据我的理解,LSTM有4层.如果我没有将任何激活参数传递给LSTM构造函数,请解释每个层的默认激活函数是什么?
我在初始基础上使用VGG16网络构建了一个Sequential模型,例如:
from keras.applications import VGG16
conv_base = VGG16(weights='imagenet',
# do not include the top, fully-connected Dense layers
include_top=False,
input_shape=(150, 150, 3))
from keras import models
from keras import layers
model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
# the 3 corresponds to the three output classes
model.add(layers.Dense(3, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)
我的模型看起来像这样:
model.summary()
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Layer (type) Output Shape Param # ================================================================= vgg16 (Model) (None, 4, 4, 512) 14714688 _________________________________________________________________ flatten_1 (Flatten) (None, 8192) 0 _________________________________________________________________ dense_7 (Dense) (None, 256) 2097408 _________________________________________________________________ dense_8 (Dense) (None, 3) …
我将Conv2D层定义为:
Conv2D(96, kernel_size=(5, 5),
activation='relu',
input_shape=(image_rows, image_cols, 1),
kernel_initializer=initializers.glorot_normal(seed),
bias_initializer=initializers.glorot_uniform(seed),
padding='same',
name='conv_1')
Run Code Online (Sandbox Code Playgroud)
这是我网络中的第一层.
输入尺寸为64 x 160,图像为1通道.
我试图从这个卷积层可视化权重,但不知道如何获得它们.
这是我现在这样做的方式:
1.Call
layer.get_weights()[0]
Run Code Online (Sandbox Code Playgroud)
这会形成一系列形状(5,5,1,96).1是因为图像是1通道.
2.使用5乘5过滤器
layer.get_weights()[0][:,:,:,j][:,:,0]
Run Code Online (Sandbox Code Playgroud)
非常难看,但我不知道如何简化这一点,任何评论都非常感激.
我不确定这些5乘5个方格.他们实际过滤了吗?
如果不是,请告诉我们如何正确地从模型中获取过滤器?
在一些特征提取实验中,我注意到“model.pop()”功能没有按预期工作。对于像 vgg16 这样的预训练模型,在使用 'model.pop()' 后,model.summary() 显示该层已被删除(预期有 4096 个特征),但是在将图像通过新模型时,结果相同特征数量(1000)作为原始模型。无论移除多少层,包括一个完全空的模型,它都会生成相同的输出。寻求您对可能出现的问题的指导。
#Passing an image through the full vgg16 model
model = VGG16(weights = 'imagenet', include_top = True, input_shape = (224,224,3))
img = image.load_img( 'cat.jpg', target_size=(224,224) )
img = image.img_to_array( img )
img = np.expand_dims( img, axis=0 )
img = preprocess_input( img )
features = model.predict( img )
features = features.flatten()
print(len(features)) #Expected 1000 features corresponding to 1000 imagenet classes
Run Code Online (Sandbox Code Playgroud)
1000
model.layers.pop()
img = image.load_img( 'cat.jpg', target_size=(224,224) )
img = image.img_to_array( img )
img …Run Code Online (Sandbox Code Playgroud) 我刚刚开始玩Keras并开始制作自定义图层.但是,我对许多不同类型的图层感到困惑,这些图层的名称略有不同,但具有相同的功能.
例如,https://keras.io/layers/merge/和https://www.tensorflow.org/api_docs/python/tf/keras/backend/concatenate有三种不同形式的连接函数.
keras.layers.Concatenate(axis=-1)
keras.layers.concatenate(inputs, axis=-1)
tf.keras.backend.concatenate()
Run Code Online (Sandbox Code Playgroud)
我知道第二个用于功能API,但3之间有什么区别?文档似乎有点不清楚.
此外,对于第三个,我看到了一个代码,在下面执行此操作.连接后为什么必须有._keras_shape行?
# Concatenate the summed atom and bond features
atoms_bonds_features = K.concatenate([atoms, summed_bond_features], axis=-1)
# Compute fingerprint
atoms_bonds_features._keras_shape = (None, max_atoms, num_atom_features + num_bond_features)
Run Code Online (Sandbox Code Playgroud)
最后,在keras.layers下,似乎总共有2个重复.例如,Add()和add()等.
我已经使用自定义优化器编译和训练了 keras 模型。我保存了模型,但是当我尝试加载模型时,它抛出一个错误,指出ValueError: Unknown optimizer: MyOptimizer. 我试图将 MyOptimizer 作为自定义对象传递,例如 :models.load_model('myModel.h5', custom_objects={'optimizer':MyOptimizer})并且它仍然抛出错误。如何使用自定义对象将模型加载到 keras 模型?
我在玩 Keras 一点,我在想线性激活层和根本没有激活层之间有什么区别?它没有相同的行为吗?如果是这样,那么线性激活的意义何在?
我的意思是这两个代码片段之间的区别:
model.add(Dense(1500))
model.add(Activation('linear'))
model.add(Dense(1500))
Run Code Online (Sandbox Code Playgroud)
和
model.add(Dense(1500))
model.add(Dense(1500))
Run Code Online (Sandbox Code Playgroud) 我构建了一个带有自定义层的 Keras 模型,并.h5通过回调将其保存到一个文件中ModelCheckPoint。当我在训练后尝试加载此模型时,出现以下错误消息:
Run Code Online (Sandbox Code Playgroud)__init__() missing 1 required positional argument: 'pool_size'
这是自定义层及其__init__方法的定义:
__init__() missing 1 required positional argument: 'pool_size'
Run Code Online (Sandbox Code Playgroud)
这就是我将此层添加到我的模型的方式:
class MyMeanPooling(Layer):
def __init__(self, pool_size, axis=1, **kwargs):
self.supports_masking = True
self.pool_size = pool_size
self.axis = axis
self.y_shape = None
self.y_mask = None
super(MyMeanPooling, self).__init__(**kwargs)
Run Code Online (Sandbox Code Playgroud)
这是我加载模型的方式:
x = MyMeanPooling(globalvars.pool_size)(x)
Run Code Online (Sandbox Code Playgroud)
这些是完整的错误消息:
Traceback (most recent call last):
File "D:/My Projects/Attention_BLSTM/script3.py", line 9, in <module>
model = load_model(model_path, custom_objects={'MyMeanPooling': MyMeanPooling})
File "D:\ProgramData\Anaconda3\envs\tf\lib\site-packages\keras\engine\saving.py", line 419, in load_model
model = _deserialize_model(f, …Run Code Online (Sandbox Code Playgroud) 我正在尝试保存模型,然后加载它以做出一些预测;发生的情况是,训练后模型的准确度为95%+,但是当我保存它然后加载它时,准确度下降到几乎10%相同数据集。
要重现此错误结果,您可以运行以下命令非常小的笔记本。
该模型定义如下:
model_scratch_auto = models.Sequential()
model_scratch_auto.add(Flatten(input_shape=(28,28)))
model_scratch_auto.add(Dense(80, activation='relu'))
model_scratch_auto.add(Dense(100, activation='relu'))
model_scratch_auto.add(Dense(120, activation='relu'))
model_scratch_auto.add(Dense(100, activation='relu'))
auto_srelu=AutoSRELU()
model_scratch_auto.add(auto_srelu)
model_scratch_auto.add(Dense(120, activation='relu'))
model_scratch_auto.add(auto_srelu)
model_scratch_auto.add(BatchNormalization())
model_scratch_auto.add(Dense(10, activation='softmax'))
model_scratch_auto.compile(optimizer = tf.optimizers.Adam(),loss='categorical_crossentropy', metrics=['acc',f1_m,precision_m, recall_m])
model_scratch_auto.fit(X_train, y_train , batch_size=64, epochs=5, validation_data=(X_test, y_test),verbose=1)
Run Code Online (Sandbox Code Playgroud)
其中自定义层,AutoSRELU定义如下:
initializer0 = keras.initializers.RandomUniform(minval = -1, maxval =1)
initializer1 = keras.initializers.RandomUniform(minval = 0.5, maxval =3)
class MinMaxConstraint(keras.constraints.Constraint):
def __init__(self, minval, maxval):
self.minval = tf.constant(minval ,dtype='float32')
self.maxval = tf.constant(maxval ,dtype='float32')
def __call__(self, w):
tf.cond(tf.greater(self.minval,w)
, lambda: …Run Code Online (Sandbox Code Playgroud) keras ×10
keras-layer ×10
python ×3
keras-2 ×2
tensorflow ×2
convolution ×1
convolutional-neural-network ×1
lstm ×1
python-3.x ×1
tf.keras ×1