在Keras中使用已训练模型层创建另一个模型

我在Keras中创建了一个模型,如下所示:

    m = Sequential()    m.add(Dense(912, activation='relu', input_shape=(943, 1)))    m.add(Dense(728, activation='relu'))    m.add(Dense(528, activation='relu'))    m.add(Flatten())    m.add(Dense(500, activation='relu', name="bottleneck"))    m.add(Dense(528, activation='relu'))    m.add(Dense(728, activation='relu'))    m.add(Dense(943, activation='linear'))    m.compile(loss='mean_squared_error', optimizer='SGD')    m.summary()

现在我想将bottleneck层添加到我下面的创建网络中:

    model = Sequential()    model.add(Dense(930, activation='relu', input_shape=(943, 1)))    model.add(Flatten())    model.add(m.get_layer('bottleneck'))    model.add(m.get_layer('bottleneck'))    model.add(m.get_layer('bottleneck'))    model.add(m.get_layer('bottleneck'))    model.add(Flatten())    model.add(Dense(100, activation='linear'))

但是在训练模型m之后,启动时引发了错误:

ValueError: Input 0 is incompatible with layer bottleneck: expected axis -1 of input shape to have value 497904 but got shape (None, 876990)

回答:

错误消息试图告诉你,在第二个模型中,你输入到’bottleneck’层的形状与第一个模型中的不同。

为了重用一个层,你需要匹配该层的输入数量。在你的情况下,第一个模型有497904个输入到该层,但你在下一模型中试图使用一个具有876990个输入的输入层。

我猜你可能想要这样的结构(注意,每次我都立即展平,这样我们可以更好地控制每一层的输入数量):

m = Sequential()m.add(Flatten(input_shape=(943, 1)))m.add(Dense(912, activation='relu'))m.add(Dense(728, activation='relu'))m.add(Dense(528, activation='relu'))m.add(Dense(500, activation='relu', name="bottleneck"))m.add(Dense(528, activation='relu'))m.add(Dense(728, activation='relu'))m.add(Dense(943, activation='linear'))m.compile(loss='mean_squared_error', optimizer='SGD')m.summary()
Model: "sequential"_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================flatten (Flatten)            (None, 943)               0         _________________________________________________________________dense (Dense)                (None, 912)               860928    _________________________________________________________________dense_1 (Dense)              (None, 728)               664664    _________________________________________________________________dense_2 (Dense)              (None, 528)               384912    _________________________________________________________________bottleneck (Dense)           (None, 500)               264500    _________________________________________________________________dense_3 (Dense)              (None, 528)               264528    _________________________________________________________________dense_4 (Dense)              (None, 728)               385112    _________________________________________________________________dense_5 (Dense)              (None, 943)               687447    =================================================================Total params: 3,512,091Trainable params: 3,512,091Non-trainable params: 0

请注意,我们的瓶颈层输入的形状是(None,528)。所以现在,在第二个模型中我们可以这样做:

model = Sequential()model.add(Dense(930, activation='relu', input_shape=(943, 1)))model.add(Flatten())model.add(Dense(528, activation='relu'))model.add(m.get_layer('bottleneck'))model.add(Flatten())model.add(Dense(100, activation='linear'))model.summary()
Model: "sequential_2"_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================dense_9 (Dense)              (None, 943, 930)          1860      _________________________________________________________________flatten_3 (Flatten)          (None, 876990)            0         _________________________________________________________________dense_10 (Dense)             (None, 528)               463051248 _________________________________________________________________bottleneck (Dense)           (None, 500)               264500    _________________________________________________________________flatten_4 (Flatten)          (None, 500)               0         _________________________________________________________________dense_11 (Dense)             (None, 100)               50100     =================================================================Total params: 463,367,708Trainable params: 463,367,708Non-trainable params: 0

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注