Keras(顺序)-多输入(数字+ n嵌入)中的model.summarize()可以工作吗?

时间:2019-07-16 17:49:33

标签: python-3.x keras keras-layer

在keras中使用Sequential类构建像这样的结构后,我很难打印model.summary():

embedding_inputs*   numerical_input
      \                   /
       \                 /
         -- CONCATENATE--
                 |
            DENSE (50) #1
            DENSE (50) #2
            DENSE (50) #3
            DENSE (50) #4
            DENSE (1)  #output


* embedding_inputs are a bunch of concatenated sequential models from 
categorical variables. For the sake of simplicity, 
let's pretend there is only one.

我知道没有嵌入层,我的模型可以正常工作并且看起来不错。但是,在添加了一个嵌入层和一个连接层之后,我被告知需要构建模型,或者我的输出张量“必须是Keras层的输出”。

在这一点上,我完全感到困惑。 (我习惯于使用功能性api,但令人尴尬的是,顺序API遇到了很多麻烦,想学习。)

categorical = Sequential()
categorical.add(Embedding(
    input_dim=len(df_train['mon'].astype('category').cat.categories),
    output_dim=2,
    input_length=1))
categorical.add(Flatten())

numeric = Sequential()
numeric.add(InputLayer(input_shape(1,len(numeric_column_names)),dtype='float32',name='numerical_in'))

model = Sequential()
model.add(Concatenate([numeric,categoric]))

model.add(Dense(50, input_dim=50, kernel_initializer='normal', activation='relu'))
model.add(Dense(50, input_dim=50, kernel_initializer='normal', activation='relu'))
model.add(Dense(50, input_dim=50, kernel_initializer='normal', activation='relu'))
model.add(Dense(50, input_dim=50, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal')) #output layer (1 number)

如果我尝试在没有构建的情况下使用model.summary(): ValueError: This model has not yet been built. Build the model first by calling build() or calling fit() with some data. Or specify input_shape or batch_input_shape in the first layer for automatic build.

如果我尝试先使用model.build(),则会收到类似以下消息:

ValueError: Output tensors to a Sequential must be the output of a Keras `Layer` (thus holding past layer metadata). Found: None

0 个答案:

没有答案