keras sequential创建网络模型和functional api创建网络模型的区别

> //20201101

> 写在前面:最近在过tensorflow和keras的基础,今天学到了keras两种创建网络模型的区别,在此记录一下

### 1.sequential序列创建网络模型

 - 使用sequential创建网络模型,只能顺序创建,也就是说,网络是线性传播的,不能有共享输入或者共享输出

 - 使用sequential创建网络模型有两种方法

  - 使用add()方法将所需的网络层一层一层累加进去

  - 直接在sequential方法中传入列表格式数据(其中包含所需要创建网络的架构)

#### 源代码实例如下

- 第一种方法

from keras.models import Sequential
from keras.layers import Dense

# 構建模型
model = Sequential()
model.add(Dense(2, input_shape=(1,)))
model.add(Dense(1))

- 第二种方法

model = Sequential([
   Dense(2,input_shape = (1,))
   Dense(1)    
])

> ps:然后调用compile()编译网络,调用fit()训练网络

### 2.使用functional api创建网络

- functional api创建网络时允许网络中有分支路线与汇合结点(使用concatenate方法)

- 具体代码示例如下

mnist_input = keras.layers.Input(shape=(28*28,1),name = 'input')
    lstm1 = keras.layers.LSTM(128,name = 'lstm1')(mnist_input)

    interp21 = keras.layers.Dense(64,activation='relu',name='interp21')(lstm1)
    interp22 = keras.layers.Dense(32,activation='relu',name='interp22')(interp21)
    interp23 = keras.layers.Dense(16,activation='relu',name='interp23')(interp22)

    interp11 = keras.layers.Dense(10,activation='relu',name='interp11')(lstm1)

    merge = keras.layers.concatenate([interp23,interp11],name='merge')

    output = keras.layers.Dense(10,activation='softmax',name='output')(merge)

    model = keras.models.Model(inputs=mnist_input,outputs=output)

    print(model.summary())
    return model

- 网络拓扑图像为:

#### 以上

#### 希望对大家有所帮助

原文地址:https://www.cnblogs.com/lavender-pansy/p/13910855.html