Я провел эксперимент, но не могу понять, почему я получаю такой результат:
- Я создаю и подгоняю простую модель, используя функциональный API с 3 скрытыми слоями:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
input_ = layers.Input(shape=(X_train.shape[1:]))
hidden1 = layers.Dense(30, activation='relu')(input_)
hidden2 = layers.Dense(30, activation='relu')(hidden1)
hidden3 = layers.Dense(30, activation='relu')(hidden2)
output = layers.Dense(1)(hidden3)
model1 = keras.Model(inputs=input_, outputs=output)
model1.compile(optimizer='adam', loss='mse')
history = model1.fit(x=X_train, y=y_train, epochs=200)
Теперь скажите, что я хочу исследовать активацию второго скрытого слоя. Затем я создаю другую модель, подобную этой:
model2 = keras.Model(inputs=input_, outputs=hidden2)
Удивительно для меня, если я сейчас позвоню model2.weights
, эти веса такие же, как model1.layers[2].weights
, который был установлен ранее, но я никогда не звоню .fit()
на model2
.
Это привело меня к мысли, что веса слоя должны храниться в объекте hidden2
после того, как я вызову model1.fit(x=X_train, y=y_train, epochs=200)
, поэтому, когда я определяю model2 = keras.Model(inputs=input_, outputs=hidden2)
, он уже знает веса.
Но когда я попытался исследовать объект hidden2
, я не смог найти способ извлечь вес.
Следовательно, мой вопрос, как это возможно, что model2
знает веса model1
, если они не содержатся в объекте hidden2
?
Большое спасибо