Кто-нибудь сталкивался с этой ошибкой раньше?
Код: Выделить всё
---------------------------------------------------------------------------
StagingError Traceback (most recent call last)
Cell In[50], line 24
21 with strategy.scope():
22 model = build_model()
---> 24 model.fit(train_gen, verbose=1, validation_data = valid_gen, epochs=10, callbacks = [LR2])
25 model.save_weights(f'EffNet_v{VER}_f{i}.weights.h5')
26 oof = model.predict(valid_gen, verbose=1)
File /opt/conda/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py:123, in filter_traceback..error_handler(*args, **kwargs)
120 filtered_tb = _process_traceback_frames(e.__traceback__)
121 # To get the full stack trace, call:
122 # `keras.config.disable_traceback_filtering()`
--> 123 raise e.with_traceback(filtered_tb) from None
124 finally:
125 del filtered_tb
File /opt/conda/lib/python3.10/site-packages/tensorflow/python/eager/polymorphic_function/autograph_util.py:52, in py_func_from_autograph..autograph_handler(*args, **kwargs)
50 except Exception as e: # pylint:disable=broad-except
51 if hasattr(e, "ag_error_metadata"):
---> 52 raise e.ag_error_metadata.to_exception(e)
53 else:
54 raise
StagingError: in user code:
File "/opt/conda/lib/python3.10/site-packages/keras/src/backend/tensorflow/trainer.py", line 105, in one_step_on_data **
return self.train_step(data)
File "/opt/conda/lib/python3.10/site-packages/keras/src/backend/tensorflow/trainer.py", line 56, in train_step
y_pred = self(x, training=True)
File "/opt/conda/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py", line 123, in error_handler
raise e.with_traceback(filtered_tb) from None
File "/opt/conda/lib/python3.10/site-packages/keras/src/ops/function.py", line 161, in _run_through_graph
output_tensors.append(tensor_dict[id(x)])
KeyError: 'Exception encountered when calling Functional.call().\n\n\x1b[1m137598607979904\x1b[0m\n\nArguments received by Functional.call():\n • inputs=tf.Tensor(shape=(None, 256, 512, 3), dtype=float32)\n • training=True\n • mask=None'
Код: Выделить всё
from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras.layers import Concatenate, GlobalAveragePooling2D, Dense
from tensorflow.keras import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import KLDivergence
from tensorflow.keras.layers import Lambda, Concatenate
from tensorflow.keras.layers import Layer
# Define the names of the layers corresponding to blocks A and B
block_a_layers = ['block1a_dwconv', 'block1a_bn', 'block1a_activation', 'block1a_se_squeeze', 'block1a_se_reshape', 'block1a_se_reduce', 'block1a_se_expand', 'block1a_se_excite', 'block1a_project_conv', 'block1a_project_bn',
'block2a_expand_conv', 'block2a_expand_bn', 'block2a_expand_activation', 'block2a_dwconv_pad', 'block2a_dwconv', 'block2a_bn', 'block2a_activation', 'block2a_se_squeeze', 'block2a_se_reshape', 'block2a_se_reduce', 'block2a_se_expand', 'block2a_se_excite', 'block2a_project_conv', 'block2a_project_bn', 'block2b_expand_conv', 'block2b_expand_bn', 'block2b_expand_activation', 'block2b_dwconv', 'block2b_bn', 'block2b_activation', 'block2b_se_squeeze', 'block2b_se_reshape', 'block2b_se_reduce', 'block2b_se_expand', 'block2b_se_excite', 'block2b_project_conv', 'block2b_project_bn', 'block2b_drop', 'block2b_add',
'block3a_expand_conv', 'block3a_expand_bn', 'block3a_expand_activation', 'block3a_dwconv_pad', 'block3a_dwconv', 'block3a_bn', 'block3a_activation', 'block3a_se_squeeze', 'block3a_se_reshape', 'block3a_se_reduce', 'block3a_se_expand', 'block3a_se_excite', 'block3a_project_conv', 'block3a_project_bn', 'block3b_expand_conv', 'block3b_expand_bn', 'block3b_expand_activation', 'block3b_dwconv', 'block3b_bn', 'block3b_activation', 'block3b_se_squeeze', 'block3b_se_reshape', 'block3b_se_reduce', 'block3b_se_expand', 'block3b_se_excite', 'block3b_project_conv', 'block3b_project_bn', 'block3b_drop', 'block3b_add',
'block4a_expand_conv', 'block4a_expand_bn', 'block4a_expand_activation', 'block4a_dwconv_pad', 'block4a_dwconv', 'block4a_bn', 'block4a_activation', 'block4a_se_squeeze', 'block4a_se_reshape', 'block4a_se_reduce', 'block4a_se_expand', 'block4a_se_excite', 'block4a_project_conv', 'block4a_project_bn', 'block4b_expand_conv', 'block4b_expand_bn', 'block4b_expand_activation', 'block4b_dwconv', 'block4b_bn', 'block4b_activation', 'block4b_se_squeeze', 'block4b_se_reshape', 'block4b_se_reduce', 'block4b_se_expand', 'block4b_se_excite', 'block4b_project_conv', 'block4b_project_bn', 'block4b_drop', 'block4b_add', 'block4c_expand_conv', 'block4c_expand_bn', 'block4c_expand_activation', 'block4c_dwconv', 'block4c_bn', 'block4c_activation', 'block4c_se_squeeze', 'block4c_se_reshape', 'block4c_se_reduce', 'block4c_se_expand', 'block4c_se_excite', 'block4c_project_conv', 'block4c_project_bn',
'block4c_drop', 'block4c_add'
]
block_b_layers = [
'block5a_expand_conv', 'block5a_expand_bn', 'block5a_expand_activation', 'block5a_dwconv', 'block5a_bn', 'block5a_activation', 'block5a_se_squeeze', 'block5a_se_reshape', 'block5a_se_reduce', 'block5a_se_expand', 'block5a_se_excite', 'block5a_project_conv', 'block5a_project_bn', 'block5b_expand_conv', 'block5b_expand_bn', 'block5b_expand_activation', 'block5b_dwconv', 'block5b_bn', 'block5b_activation', 'block5b_se_squeeze', 'block5b_se_reshape', 'block5b_se_reduce', 'block5b_se_expand', 'block5b_se_excite', 'block5b_project_conv', 'block5b_project_bn', 'block5b_drop', 'block5b_add', 'block5c_expand_conv', 'block5c_expand_bn', 'block5c_expand_activation', 'block5c_dwconv', 'block5c_bn', 'block5c_activation', 'block5c_se_squeeze', 'block5c_se_reshape', 'block5c_se_reduce', 'block5c_se_expand', 'block5c_se_excite', 'block5c_project_conv', 'block5c_project_bn', 'block5c_drop', 'block5c_add',
'block6a_expand_conv', 'block6a_expand_bn', 'block6a_expand_activation', 'block6a_dwconv_pad', 'block6a_dwconv', 'block6a_bn', 'block6a_activation', 'block6a_se_squeeze', 'block6a_se_reshape', 'block6a_se_reduce', 'block6a_se_expand', 'block6a_se_excite', 'block6a_project_conv', 'block6a_project_bn', 'block6b_expand_conv', 'block6b_expand_bn', 'block6b_expand_activation', 'block6b_dwconv', 'block6b_bn', 'block6b_activation', 'block6b_se_squeeze', 'block6b_se_reshape', 'block6b_se_reduce', 'block6b_se_expand', 'block6b_se_excite', 'block6b_project_conv', 'block6b_project_bn', 'block6b_drop', 'block6b_add', 'block6c_expand_conv', 'block6c_expand_bn', 'block6c_expand_activation', 'block6c_dwconv', 'block6c_bn', 'block6c_activation', 'block6c_se_squeeze', 'block6c_se_reshape', 'block6c_se_reduce', 'block6c_se_expand', 'block6c_se_excite', 'block6c_project_conv', 'block6c_project_bn', 'block6c_drop', 'block6c_add', 'block6d_expand_conv', 'block6d_expand_bn', 'block6d_expand_activation', 'block6d_dwconv', 'block6d_bn', 'block6d_activation', 'block6d_se_squeeze', 'block6d_se_reshape', 'block6d_se_reduce', 'block6d_se_expand', 'block6d_se_excite', 'block6d_project_conv', 'block6d_project_bn', 'block6d_drop', 'block6d_add',
'block7a_expand_conv', 'block7a_expand_bn', 'block7a_expand_activation', 'block7a_dwconv', 'block7a_bn', 'block7a_activation', 'block7a_se_squeeze', 'block7a_se_reshape', 'block7a_se_reduce', 'block7a_se_expand', 'block7a_se_excite', 'block7a_project_conv', 'block7a_project_bn'
]
def build_model():
inp1 = tf.keras.Input(shape=(229, 232, 4))
inp2 = tf.keras.Input(shape=(128, 256, 4))
inp_A1 = tf.keras.Input(shape=(256, 512, 3))
inp_A2 = tf.keras.Input(shape=(256, 512, 3))
input_B = tf.keras.Input(shape = (None,None,160))
# Load the EfficientNetB0 model pre-trained on ImageNet
base_model = tf.keras.applications.EfficientNetB0( include_top=False, weights='imagenet', input_shape=None)
# Reshape Input X1 229x232x4 => 458x464x3 Monotone Image => Resize to 256x512x3
x1 = [inp1[:,:,:,i:i+1] for i in range(2)]
x1 = tf.keras.layers.Concatenate(axis=1)(x1)
x2 = [inp1[:,:,:,i+2:i+3] for i in range(2)]
x2 = tf.keras.layers.Concatenate(axis=1)(x2)
x_1 = tf.keras.layers.Concatenate(axis=2)([x1,x2])
x_1 = tf.keras.layers.Concatenate(axis=3)([x_1,x_1,x_1])
x_1 = tf.keras.layers.Resizing(height=256, width=512)(x_1)
# Reshape Input X2 128x256x4 => 256x512x3
x3 = [inp2[:,:,:,i:i+1] for i in range(2)]
x3 = tf.keras.layers.Concatenate(axis=1)(x3)
x4 = [inp2[:,:,:,i+2:i+3] for i in range(2)]
x4 = tf.keras.layers.Concatenate(axis=1)(x4)
x_2 = tf.keras.layers.Concatenate(axis=2)([x3,x4])
x_2 = tf.keras.layers.Concatenate(axis=3)([x_2,x_2,x_2])
# Create the model for block A
block_a_outputs_1 = [base_model.get_layer(name).output for name in block_a_layers]
block_a_outputs_2 = [base_model.get_layer(name).output for name in block_a_layers]
block_a_model_1 = tf.keras.Model(inputs=inp_A1, outputs=block_a_outputs_1)
block_a_model_2 = tf.keras.Model(inputs=inp_A2, outputs=block_a_outputs_2)
# Create the model for block B
block_b_outputs = [base_model.get_layer(name1).output for name1 in block_b_layers]
block_b_model = tf.keras.Model(inputs=input_B, outputs=block_b_outputs)
# Get the outputs from block A for both inputs
block_a_output_1 = block_a_model_1(x_1)
block_a_output_2 = block_a_model_2(x_2)
# Concatenate the outputs from block A
concatenated_output = tf.keras.layers.Concatenate(axis=-1)([block_a_output_1[-1],block_a_output_2[-1]])
# Get the output from block B using the concatenated features
block_b_output = block_b_model(concatenated_output)
#block_b_output = tf.keras.layers.Concatenate(axis=-1)(block_b_output[-1])
# OUTPUT
x = tf.keras.layers.GlobalAveragePooling2D()(block_b_output[-1])
x = tf.keras.layers.Dense(6,activation='softmax', dtype='float32')(x)
# COMPILE MODEL
model = tf.keras.Model(inputs=(inp1, inp2), outputs=x)
opt = tf.keras.optimizers.Adam(learning_rate = 1e-3)
loss = tf.keras.losses.KLDivergence()
model.compile(loss=loss, optimizer = opt)
return model
Код: Выделить всё
from sklearn.model_selection import KFold, GroupKFold
import tensorflow.keras.backend as K, gc
VER = 2
all_oof = []
all_true = []
gkf = GroupKFold(n_splits=5)
for i, (train_index, valid_index) in enumerate(gkf.split(train, train.target, train.patient_id)):
print('#'*25)
print(f'### Fold {i+1}')
train_gen = DataGenerator(train.iloc[train_index], shuffle=True, batch_size=32)
valid_gen = DataGenerator(train.iloc[valid_index], shuffle=False, batch_size=64)
print(f'### train size {len(train_index)}, valid size {len(valid_index)}')
print('#'*25)
K.clear_session()
with strategy.scope():
model = build_model()
model.fit(train_gen, verbose=1, validation_data = valid_gen, epochs=10, callbacks = [LR2])
Подробнее здесь: https://stackoverflow.com/questions/782 ... ional-call