Почему моя модель кераса не бросает и ошибки, когда различные размеры передаются на плотный слой?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему моя модель кераса не бросает и ошибки, когда различные размеры передаются на плотный слой?

Сообщение Anonymous »

Я работаю над проблемой многоклассной сегментации динамических временных рядов с Keras (Tensorflow версия 2.12.0), и я хотел посмотреть, что произойдет, когда я упал в плотный слой в сетевую архитектуру. Мое ожидание состоит в том, что для любой ситуации, когда изменение размера ввода (например, динамические временные ряды) вам нужно будет включить какой -либо слой объединения, который будет поддерживать фиксированную форму ввода в плотный слой. Мне удалось получить его работу без каких -либо слоев объединения, и мне интересно, почему я не получаю ошибку на плотном уровне при передаче входов динамического размера в сеть.

Код: Выделить всё

def residual_block(input_layer, filters=64, kernel_size=(1, 2), strides=1):
conv_x = keras.layers.Conv2D(
filters=filters, kernel_size=kernel_size, padding="same"
)(input_layer)
conv_x = keras.layers.Activation("relu")(conv_x)

conv_y = keras.layers.Conv2D(
filters=filters, kernel_size=kernel_size, padding="same"
)(conv_x)
conv_y = keras.layers.Activation("relu")(conv_y)

conv_z = keras.layers.Conv2D(
filters=filters, kernel_size=kernel_size, padding="same"
)(conv_y)

# expand channels for the sum
shortcut_y = keras.layers.Conv2D(
filters=filters, kernel_size=(1, 1), padding="same"
)(input_layer)

output_block = keras.layers.add([shortcut_y, conv_z])
output_block = keras.layers.Activation("relu")(output_block)

return output_block

def residual_blocks(input_layer, num_blocks=8):
x = input_layer

for block in range(num_blocks):
x = residual_block(x)

return x

def classifier_block(ecoder_results, num_cats):
conv_y = keras.layers.Conv2D(filters=num_cats, kernel_size=(1, 2), padding="same")(
ecoder_results
)
conv_y = keras.layers.Activation("softmax")(conv_y)

return conv_y

def dense_connection_block(ecoder_results, units=64):

return keras.layers.Dense(units=64)(ecoder_results)

def residual_cnn_w_dense(input_shape, num_categories=2):
inputs = tf.keras.layers.Input(shape=input_shape)

encoder = residual_blocks(inputs)

denseout = dense_connection_block(encoder)

outputs = classifier_block(denseout, num_categories)

model = tf.keras.Model(inputs=inputs, outputs=outputs, name="residual_cnn_w_dense")

return model

< /code>
Составьте модель для входных каналов 3 и 2 класса сегментации < /p>
num_time_series_channels = 3

model = residual_cnn_w_dense(
input_shape=(None, None, num_time_series_channels),
)

model.compile(
run_eagerly=True,
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
loss=focal_loss,
metrics=dice_coef_multiclass,
)
< /code>
Создайте несколько входов во времени разных размеров с формой (партия, 1, время, функциональные каналы), где изменяется длина временных рядов. < /p>
data_input_0 = np.random.randn(12,1,32,3)
data_input_1 = np.random.randn(17,1,12,3)
< /code>
Запустите модель на каждом входе в разные формы < /p>
model(data_input_0).shape, model(data_input_1).shape
< /code>
Это работает и возвращает
(TensorShape([12, 1, 32, 2]), TensorShape([17, 1, 12, 2]))

Обучение модели также работает и не устраняет ошибку при изменении длины временных рядов.
Что здесь происходит? Почему я не получаю ошибки на плотном слое?

Подробнее здесь: https://stackoverflow.com/questions/797 ... assed-to-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»