Anonymous
Модель U-Net: неправильное количество входов и выходов, обнаружена ошибка в коде класса/архитектуре
Сообщение
Anonymous » 18 янв 2025, 19:58
Я пытаюсь заставить работать собственную версию модели EelSpecNet, основанную на архитектуре Unet. Исходную большую версию можно найти здесь:
текст
Модель используется для восстановления оптического спектра по данным мультиспектрального датчика, тогда как каналы датчиков имеют широкое спектральное распределение и не плотные полосы пропускания.
Исходная модель слишком велика для моих данных, я пытаюсь уменьшить ее до размера ввода/вывода 96.
Когда я запускаю модель, она дает у меня ошибка, что "Размеры должны быть равными, но имеют размеры 96 и 48 дюймов.
Я новичок в этой модели и был бы очень признателен за подсказку о том, что изменить.
Вот код:
Код: Выделить всё
import tensorflow as tf
class EELSpecNetModel_CNN_96ST(tf.keras.Model):
def __init__(self):
super(EELSpecNetModel_CNN_96ST, self).__init__()
kerl_size = 4
self.conv_96x1 = tf.keras.layers.Conv2D(1, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.conv_48x2 = tf.keras.layers.Conv2D(2, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.conv_24x4 = tf.keras.layers.Conv2D(4, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.conv_12x8 = tf.keras.layers.Conv2D(8, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.conv_6x16 = tf.keras.layers.Conv2D(16, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.conv_3x32 = tf.keras.layers.Conv2D(32, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
# =======================================================================
self.deconv_6x16 = tf.keras.layers.Conv2DTranspose(16, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.deconv_12x8 = tf.keras.layers.Conv2DTranspose(8, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.deconv_24x4 = tf.keras.layers.Conv2DTranspose(4, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.deconv_48x2 = tf.keras.layers.Conv2DTranspose(2, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.deconv_96x1 = tf.keras.layers.Conv2DTranspose(1, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform')
self.concat = tf.keras.layers.concatenate
self.relu = tf.keras.activations.relu
def call(self, inputs):
enc_96x1 = self.conv_96x1(inputs)
enc_48x2 = self.conv_48x2(enc_96x1)
enc_24x4 = self.conv_24x4(enc_48x2)
enc_12x8 = self.conv_12x8(enc_24x4)
enc_6x16 = self.conv_6x16(enc_12x8)
enc_3x32 = self.conv_3x32(enc_6x16)
# =======================================================================
dcd_6x16 = self.deconv_6x16(enc_3x32)
dcd_6x16x2 = self.concat([dcd_6x16, enc_6x16], axis=-1)
dcd_12x8 = self.deconv_12x8(dcd_6x16x2)
dcd_12x8x2 = self.concat([dcd_12x8, enc_12x8], axis=-1)
dcd_24x4 = self.deconv_24x4(dcd_12x8x2)
dcd_24x4x2 = self.concat([dcd_24x4, enc_24x4], axis=-1)
dcd_48x2 = self.deconv_48x2(dcd_24x4x2)
dcd_48x2x2 = self.concat([dcd_48x2, enc_48x2], axis=-1)
dcd_96x1 = self.deconv_96x1(dcd_48x2x2)
return (dcd_96x1)
Я пытался получить помощь по Chatgpt, но он не совсем правильно понимает сложность. Я также пробовал другие версии с 16 и 64 входами, но, похоже, у меня возникли проблемы с пониманием архитектуры.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... class-code
1737219537
Anonymous
Я пытаюсь заставить работать собственную версию модели EelSpecNet, основанную на архитектуре Unet. Исходную большую версию можно найти здесь: текст Модель используется для восстановления оптического спектра по данным мультиспектрального датчика, тогда как каналы датчиков имеют широкое спектральное распределение и не плотные полосы пропускания. Исходная модель слишком велика для моих данных, я пытаюсь уменьшить ее до размера ввода/вывода 96. Когда я запускаю модель, она дает у меня ошибка, что "Размеры должны быть равными, но имеют размеры 96 и 48 дюймов. Я новичок в этой модели и был бы очень признателен за подсказку о том, что изменить. Вот код: [code]import tensorflow as tf class EELSpecNetModel_CNN_96ST(tf.keras.Model): def __init__(self): super(EELSpecNetModel_CNN_96ST, self).__init__() kerl_size = 4 self.conv_96x1 = tf.keras.layers.Conv2D(1, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.conv_48x2 = tf.keras.layers.Conv2D(2, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.conv_24x4 = tf.keras.layers.Conv2D(4, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.conv_12x8 = tf.keras.layers.Conv2D(8, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.conv_6x16 = tf.keras.layers.Conv2D(16, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.conv_3x32 = tf.keras.layers.Conv2D(32, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') # ======================================================================= self.deconv_6x16 = tf.keras.layers.Conv2DTranspose(16, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.deconv_12x8 = tf.keras.layers.Conv2DTranspose(8, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.deconv_24x4 = tf.keras.layers.Conv2DTranspose(4, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.deconv_48x2 = tf.keras.layers.Conv2DTranspose(2, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.deconv_96x1 = tf.keras.layers.Conv2DTranspose(1, (1, kerl_size), strides=(1, 2), activation='relu', padding='same', kernel_initializer='random_uniform') self.concat = tf.keras.layers.concatenate self.relu = tf.keras.activations.relu def call(self, inputs): enc_96x1 = self.conv_96x1(inputs) enc_48x2 = self.conv_48x2(enc_96x1) enc_24x4 = self.conv_24x4(enc_48x2) enc_12x8 = self.conv_12x8(enc_24x4) enc_6x16 = self.conv_6x16(enc_12x8) enc_3x32 = self.conv_3x32(enc_6x16) # ======================================================================= dcd_6x16 = self.deconv_6x16(enc_3x32) dcd_6x16x2 = self.concat([dcd_6x16, enc_6x16], axis=-1) dcd_12x8 = self.deconv_12x8(dcd_6x16x2) dcd_12x8x2 = self.concat([dcd_12x8, enc_12x8], axis=-1) dcd_24x4 = self.deconv_24x4(dcd_12x8x2) dcd_24x4x2 = self.concat([dcd_24x4, enc_24x4], axis=-1) dcd_48x2 = self.deconv_48x2(dcd_24x4x2) dcd_48x2x2 = self.concat([dcd_48x2, enc_48x2], axis=-1) dcd_96x1 = self.deconv_96x1(dcd_48x2x2) return (dcd_96x1) [/code] Я пытался получить помощь по Chatgpt, но он не совсем правильно понимает сложность. Я также пробовал другие версии с 16 и 64 входами, но, похоже, у меня возникли проблемы с пониманием архитектуры. Подробнее здесь: [url]https://stackoverflow.com/questions/79367549/u-net-model-incorrect-number-of-inputs-and-outputs-find-error-in-class-code[/url]