Keras 模型连接:属性和值错误 [英] Keras model concat: Attribute and Value error

查看:20
本文介绍了Keras 模型连接:属性和值错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我根据 Liu、Gibson 等人 2017 年的论文(https:///arxiv.org/abs/1708.09022).见图1.

This is a keras model I have made based on the paper Liu, Gibson, et al 2017 (https://arxiv.org/abs/1708.09022). It can be seen in fig1.

我有 3 个问题-

  1. 我不确定我是否按照论文正确使用了连接.
  2. 我收到 AttributeError: 'KerasTensor' object has no attribute 'add' on model4.add flatten.之前没有出现这个错误
  3. 之前,唯一的错误是 ValueError:Concatenate 层要求输入具有匹配的形状,但 concat 轴除外.得到输入形状:[(None, 310, 1, 16), (None, 310, 1, 32), (None, 310, 1, 64)],我也不知道如何处理.
  1. I am not sure if I am correctly using concatenate as per the paper.
  2. I am getting AttributeError: 'KerasTensor' object has no attribute 'add' on model4.add flatten. This error didn't show up earlier
  3. Earlier, the only error was ValueError: A Concatenate layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 310, 1, 16), (None, 310, 1, 32), (None, 310, 1, 64)], which I am also not sure how to deal with.

model1= Sequential()
model2= Sequential()
model3= Sequential()
model4= Sequential()

input_sh = (619,2,1)

model1.add(Convolution1D(filters=16, kernel_size=21, padding='same', activation='LeakyReLU', input_shape=input_sh))
model1.add(MaxPooling2D(pool_size=(2,2), padding='same')) 
model1.add(BatchNormalization())
model1.summary()

model2.add(Convolution1D(filters=32, kernel_size=11, padding='same', activation='LeakyReLU', input_shape= input_sh))
model2.add(MaxPooling2D(pool_size=(2,2), padding='same'))
model2.add(BatchNormalization())
model2.summary()

model3.add(Convolution1D(filters=64, kernel_size=5, padding='same', activation='LeakyReLU', input_shape= input_sh))
model3.add(MaxPooling2D(pool_size=(2,2), padding='same'))
model3.add(BatchNormalization())
model3.summary()

model4 = concatenate([model1.output, model2.output, model3.output], axis= -1)

model4.add(Flatten()) # Line with error
model4.add(Dense(2048, activation='tanh'))
model4.add(Dropout(.5))
model4.add(Dense(len(dic), activation="softmax")) #len(dic) = 19
model4.summary()

输出如下-

Model: "sequential_59"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_45 (Conv1D)           (None, 619, 2, 16)        352       
_________________________________________________________________
max_pooling2d_45 (MaxPooling (None, 310, 1, 16)        0         
_________________________________________________________________
batch_normalization_45 (Batc (None, 310, 1, 16)        64        
=================================================================
Total params: 416
Trainable params: 384
Non-trainable params: 32
_________________________________________________________________
Model: "sequential_60"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_46 (Conv1D)           (None, 619, 2, 32)        384       
_________________________________________________________________
max_pooling2d_46 (MaxPooling (None, 310, 1, 32)        0         
_________________________________________________________________
batch_normalization_46 (Batc (None, 310, 1, 32)        128       
=================================================================
Total params: 512
Trainable params: 448
Non-trainable params: 64
_________________________________________________________________
Model: "sequential_61"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_47 (Conv1D)           (None, 619, 2, 64)        384       
_________________________________________________________________
max_pooling2d_47 (MaxPooling (None, 310, 1, 64)        0         
_________________________________________________________________
batch_normalization_47 (Batc (None, 310, 1, 64)        256       
=================================================================
Total params: 640
Trainable params: 512
Non-trainable params: 128
_________________________________________________________________
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-25-bf7ad914aa4e> in <module>()
     44 model4 = concatenate([model1.output, model2.output, model3.output], axis= -1)
     45 
---> 46 model4.add(Flatten())
     47 model4.add(Dense(2048, activation='tanh'))
     48 model4.add(Dropout(.5))
 
AttributeError: 'KerasTensor' object has no attribute 'add'

推荐答案

您可以使用 Functional() API 来解决您的问题(我没有阅读论文,但这里是如何组合模型并获得最终输出).

You can use the Functional() API in order to solve your problem (I haven't read the paper, but here is how you can combine models and get a final output).

为了简单起见,我使用了 'relu' 激活(确保在 tensorflow 中使用 keras)

I used 'relu' activation for simplicity purposes (ensure you use keras inside tensorflow)

这是应该可以工作的代码:

Here is the code that should work:

import tensorflow as tf
from tensorflow.keras import *
from tensorflow.keras.layers import *

model1= Sequential()
model2= Sequential()
model3= Sequential()

input_sh = (619,2,1)

model1.add(Convolution1D(filters=16, kernel_size=21, padding='same', activation='relu', input_shape=input_sh))
model1.add(MaxPooling2D(pool_size=(2,2), padding='same')) 
model1.add(BatchNormalization())
model1.summary()

model2.add(Convolution1D(filters=32, kernel_size=11, padding='same', activation='relu', input_shape= input_sh))
model2.add(MaxPooling2D(pool_size=(2,2), padding='same'))
model2.add(BatchNormalization())
model2.summary()

model3.add(Convolution1D(filters=64, kernel_size=5, padding='same', activation='relu', input_shape= input_sh))
model3.add(MaxPooling2D(pool_size=(2,2), padding='same'))
model3.add(BatchNormalization())
model3.summary()

concatenated = concatenate([model1.output, model2.output, model3.output], axis=-1)
x = Dense(64, activation='relu')(concatenated)
x = Flatten()(x)
x = Dropout(.5)(x)
x = Dense(19, activation="softmax")(x)
final_model = Model(inputs=[model1.input,model2.input,model3.input],outputs=x)
final_model.summary()





Model: "functional_3"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
conv1d_15_input (InputLayer)    [(None, 619, 2, 1)]  0                                            
__________________________________________________________________________________________________
conv1d_16_input (InputLayer)    [(None, 619, 2, 1)]  0                                            
__________________________________________________________________________________________________
conv1d_17_input (InputLayer)    [(None, 619, 2, 1)]  0                                            
__________________________________________________________________________________________________
conv1d_15 (Conv1D)              (None, 619, 2, 16)   352         conv1d_15_input[0][0]            
__________________________________________________________________________________________________
conv1d_16 (Conv1D)              (None, 619, 2, 32)   384         conv1d_16_input[0][0]            
__________________________________________________________________________________________________
conv1d_17 (Conv1D)              (None, 619, 2, 64)   384         conv1d_17_input[0][0]            
__________________________________________________________________________________________________
max_pooling2d_15 (MaxPooling2D) (None, 310, 1, 16)   0           conv1d_15[0][0]                  
__________________________________________________________________________________________________
max_pooling2d_16 (MaxPooling2D) (None, 310, 1, 32)   0           conv1d_16[0][0]                  
__________________________________________________________________________________________________
max_pooling2d_17 (MaxPooling2D) (None, 310, 1, 64)   0           conv1d_17[0][0]                  
__________________________________________________________________________________________________
batch_normalization_15 (BatchNo (None, 310, 1, 16)   64          max_pooling2d_15[0][0]           
__________________________________________________________________________________________________
batch_normalization_16 (BatchNo (None, 310, 1, 32)   128         max_pooling2d_16[0][0]           
__________________________________________________________________________________________________
batch_normalization_17 (BatchNo (None, 310, 1, 64)   256         max_pooling2d_17[0][0]           
__________________________________________________________________________________________________
concatenate_5 (Concatenate)     (None, 310, 1, 112)  0           batch_normalization_15[0][0]     
                                                                 batch_normalization_16[0][0]     
                                                                 batch_normalization_17[0][0]     
__________________________________________________________________________________________________
dense_5 (Dense)                 (None, 310, 1, 64)   7232        concatenate_5[0][0]              
__________________________________________________________________________________________________
flatten_3 (Flatten)             (None, 19840)        0           dense_5[0][0]                    
__________________________________________________________________________________________________
dropout_3 (Dropout)             (None, 19840)        0           flatten_3[0][0]                  
__________________________________________________________________________________________________
dense_6 (Dense)                 (None, 19)           376979      dropout_3[0][0]                  
==================================================================================================
Total params: 385,779
Trainable params: 385,555
Non-trainable params: 224

这篇关于Keras 模型连接:属性和值错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆