【问题标题】:How to change the output of a dense layer in a keras model?如何更改 keras 模型中密集层的输出?
【发布时间】:2021-10-02 18:04:51
【问题描述】:

鉴于以下model:

Layer (type)                 Output Shape              Param #   
=================================================================
input_91 (InputLayer)        [(None, 25)]              0         
_________________________________________________________________
token_and_position_embedding (None, 25, 400)           5938800   
_________________________________________________________________
transformer_block_97 (Transf (None, 25, 400)           74832    
_________________________________________________________________
global_average_pooling1d_82  (None, 400)               0         
_________________________________________________________________
dropout_337 (Dropout)        (None, 400)               0         
_________________________________________________________________
dense_339 (Dense)            (None, 25)                22575     
_________________________________________________________________
dropout_338 (Dropout)        (None, 25)                0         
_________________________________________________________________
dense_340 (Dense)            (None, 25)                570      
=================================================================
Total params: 3,709,907
Trainable params: 3,709,907
Non-trainable params: 0

在keras中,如何将输出层改为(None, 25, 7)维度?这是当前的模型配置:

embed_dim = 400  # Embedding size for each token
num_heads = 2  # Number of attention heads
ff_dim = 32  # Hidden layer size in feed forward network inside transformer

inputs = layers.Input(shape=(25,))


embedding_layer = TokenAndPositionEmbedding(maxlen, vocab_size, embed_dim)
X = embedding_layer(inputs)
transformer_block = TransformerBlock(embed_dim, num_heads, ff_dim)
X = transformer_block(X)
X = layers.GlobalAveragePooling1D()(X)
X = layers.Dropout(0.1)(X)
X = layers.Dense(25, activation="relu")(X)
X= layers.Dropout(0.1)(X)

outputs = layers.Dense(25, activation="softmax")(x)

【问题讨论】:

  • 为什么是 25 x 7?每个数字代表什么?
  • @DavidKaftanit 只是一个假设的例子。我想知道如何在一般情况下重塑输出(如果可能的话)
  • 您所做的不仅仅是重塑。您正在将元素数量从 25 更改为 25 x 7。您是否认为您只想复制 25 个元素层 7 次?还是有错字,您的意思是“重塑为 (None, 5, 5)”?
  • 是的,我想说(None, 5, 5) 是一个错字。知道怎么做吗?我尝试修改输入但是,当我这样做时我的模型不起作用

标签: python numpy tensorflow keras deep-learning


【解决方案1】:

您正在寻找tf.keras.layers.Reshape。根据我们在 cmets 中的讨论,了解如何将层从 (None, 25) 重塑为 (None, 5, 5)。

inp = tf.keras.layers.Input((25))                                                                                   
layer = tf.keras.layers.Dense((25))(inp)                                                                            
reshaped = tf.keras.layers.Reshape((5,5))(layer)                                                                    
model = tf.keras.Model(inp, reshaped)

model.summary() 产量

_________________________________________________________________                                                       
Layer (type)                 Output Shape              Param #                                                          
=================================================================                                                       
input_3 (InputLayer)         [(None, 25)]              0                                                                
_________________________________________________________________                                                       
dense_1 (Dense)              (None, 25)                650                                                              
_________________________________________________________________                                                       
reshape_2 (Reshape)          (None, 5, 5)              0                                                                
=================================================================                                                       
Total params: 650                                                                                                       
Trainable params: 650                                                                                                   
Non-trainable params: 0   

编辑:

为了阐明如何在代码中实现这一点,请在 outputs = layers.Dense(25, activation="softmax")(x) 之后添加以下内容

reshaped_outputs = layers.Reshape((5,5))(outputs)

【讨论】:

  • 为什么transformer_block_104 消失了?
  • 我不能在我的例子中使用它,因为你没有在你的例子中显示它来自哪里。我将编辑答案以更清楚地显示如何在您的代码中实现。
猜你喜欢
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 2020-08-17
  • 2023-03-06
  • 1970-01-01
  • 2019-07-23
  • 2016-03-24
  • 1970-01-01
相关资源
最近更新 更多