【发布时间】:2020-09-26 15:08:03
【问题描述】:
我想知道为什么对于两个相同的 keras 模型,有时 get_method() 会给出相同的结果(参见 model_dense_A 和 model_dense_B),而有时不是(例如 model_conv_A 和 model_conv_B)。
即使我使用clear_session() 方法和完全相同的代码,模型仍然不同。
有人知道这种行为吗?
代码sn-p:
from tensorflow import keras
input_shape = (300, 3)
# MODEL DENSE A
keras.backend.clear_session()
input_ = keras.layers.Input(shape=input_shape)
out = keras.layers.Flatten()(input_)
out = keras.layers.Dense(units=100, activation='relu')(out)
out = keras.layers.Dense(units=50, activation='relu')(out)
out = keras.layers.Dense(units=10, activation='softmax')(out)
mdl_dense_A = keras.models.Model(name='dense', inputs=input_, outputs=out)
# MODEL DENSE B
keras.backend.clear_session()
input_ = keras.layers.Input(shape=input_shape)
out = keras.layers.Flatten()(input_)
out = keras.layers.Dense(units=100, activation='relu')(out)
out = keras.layers.Dense(units=50, activation='relu')(out)
out = keras.layers.Dense(units=10, activation='softmax')(out)
mdl_dense_B = keras.models.Model(name='dense', inputs=input_, outputs=out)
print(mdl_dense_A.get_config() == mdl_dense_B.get_config()) # True
# MODEL CONV1D-LSTM A
keras.backend.clear_session()
input_ = keras.layers.Input(shape=input_shape)
branch_outputs = []
for i in range(input_shape[-1]):
out = keras.layers.Lambda(lambda x: keras.backend.expand_dims(x[:, :, i], axis=-1))(input_)
out = keras.layers.Conv1D(filters=20, kernel_size=5, strides=2, padding='valid')(out)
branch_outputs.append(out)
out = keras.layers.Concatenate()(branch_outputs)
recursive = keras.layers.LSTM(50, return_sequences=True)(out)
recursive = keras.layers.LSTM(50)(recursive)
out = keras.layers.Dense(10, activation='softmax')(recursive)
mdl_conv_A = keras.models.Model(name='conv1d-lstm', inputs=input_, outputs=out)
# MODEL CONV1D-LSTM B
keras.backend.clear_session()
input_ = keras.layers.Input(shape=input_shape)
branch_outputs = []
for i in range(input_shape[-1]):
out = keras.layers.Lambda(lambda x: keras.backend.expand_dims(x[:, :, i], axis=-1))(input_)
out = keras.layers.Conv1D(filters=20, kernel_size=5, strides=2, padding='valid')(out)
branch_outputs.append(out)
out = keras.layers.Concatenate()(branch_outputs)
recursive = keras.layers.LSTM(50, return_sequences=True)(out)
recursive = keras.layers.LSTM(50)(recursive)
out = keras.layers.Dense(10, activation='softmax')(recursive)
mdl_conv_B = keras.models.Model(name='conv1d-lstm', inputs=input_, outputs=out)
print(mdl_conv_A.get_config() == mdl_conv_B.get_config()) # False !?
【问题讨论】:
标签: python tensorflow keras conv-neural-network lstm