import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation,Reshape
from keras.layers import Concatenate
from keras.utils.vis_utils import plot_model
from keras.layers import Input, Lambda
from keras.models import Model
def slice(x,index):
return x[:,:,index]
a = Input(shape=(4,2))
x1 = Lambda(slice,output_shape=(4,1),arguments={'index':0})(a)
x2 = Lambda(slice,output_shape=(4,1),arguments={'index':1})(a)
x1 = Reshape((4,1,1))(x1)
x2 = Reshape((4,1,1))(x2)
output = Concatenate()([x1,x2])
model = Model(a, output)
x_test = np.array([[[1,2],[2,3],[3,4],[4,5]]])
print(model.predict(x_test))
plot_model(model, to_file='lambda.png',show_shapes=True)
结果如下
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation,Reshape
from tensorflow.keras.layers import Concatenate
from tensorflow.keras.utils import plot_model # 这个用的是tensorflow
from tensorflow.keras.layers import Input, Lambda
from tensorflow.keras.models import Model
def slice(x,index):
return x[:,:,index]
a = Input(shape=(4,2))
x1 = Lambda(slice,output_shape=(4,1),arguments={'index':0})(a)
x2 = Lambda(slice,output_shape=(4,1),arguments={'index':1})(a)
x1 = Reshape((4,1,1))(x1)
x2 = Reshape((4,1,1))(x2)
output = Concatenate()([x1,x2])
model = Model(a, output)
x_test = np.array([[[1,2],[2,3],[3,4],[4,5]]])
print(model.predict(x_test))
plot_model(model, to_file='lambda.png',show_shapes=True)
# merge6 = merge([drop4, up6], mode='concat', concat_axis=3)
# 改成 merge6 = Concatenate(axis=3)([drop4, up6])
看到这个语法还是有区别的



