![8e608cedfa9b04c7dfad0c80d16ef48b.png](https://img-blog.csdnimg.cn/img_convert/8e608cedfa9b04c7dfad0c80d16ef48b.png)
keras 中有两个基本的概念:Layer 和 Tensor
Layer :是模型的组成单位,用于构建神经网络框架 在 keras 中用 大写的 module 表示,用于搭建纯模型框架,涉及到计算时使用属性 input 或 output 调出其 Tensor 如以下代码,多用于简单的 Sequential 结构(导入模块部分省略,python=3.7, keras=2.2)
n_in
上述代码使用了大写的 Concatenate function 表示一个 Layer,这个 function 的参数是元素为 Layer 的 list;
输出的结果是可以构筑 model 的 Layer,这样一个完整的 神经网络 model 完成了
如果要使用小写的 concatenate function,这个 function 里面的参数是元素为 Tensor 的 list
- Sequential function 返回模型的结构
model_1
返回值为 sequential 序列模型储存位置
若将它储存到模型中
model
model.summary() 最后一行是
sequential_1
model_1 的 layers 属性返回一个包含其所用有的所有层的列表
type
把两个 layer 用 Concatenate function 串联起来
model_2 = model_1.layers[0]
model_2 = Dense(2)
#two statements above are as the same as each other
#the first code script using the core layers
model_1 = Dense(n_out, input_shape = (n_in,))
model_2 = Dense(n_out, input_dim = n_in)
model = Sequential()
model.add(Concatenate([model_1, model_2]))
model.compile(loss='categorical_crossentropy', optimizer='SGD')
model_2 还是 Layer,若要使用其产生的 Tensor
则使用
model_2
回到刚开始提出的问题,如果要使用小写的concatenate function,则要使用Tensor
model
- 不能像上面这样写,因为 concatenate function 返回的不是 Layer,而是 Tensor
- 若要将 Tensor 转化为 Layer,则需要用到 Lambda function(同样需要首字母大写)
x
另一种组成神经网络模型的方法是用 Keras functional API
keras functional API 使用 Tensor传递的方法构建神经网络框架
input_shape
这里用到了大写的 Concatenate function,将 Tensor 参数放在 function 后面调用,返回的同样是 Tensor
- 如果使用小写的 concatenate function,这个 function 本身返回的就是 Tensor
input_shape