Системная информация
Нет пользовательского кода
Платформа и распространение ОС: Linux Ubuntu 18.04
TensorFlow backend
Версия TensorFlow: 1.13.1
Версия Keras: 2.2.4
Python версия: 3.7.4
Версия CUDA: 10.0.130
cuDNN версия: 7.4
Модель и память графического процессора: TITAN Xp, 12 ГБ
Ситуация
Вот моя цель. Я хочу сгенерировать сигнал с 26 каналами длиной 250 (скажем) из 1D-сигнала, используя Conv1D, а затем добавить ось (т. Е. Expand_dims). Таким образом, после слоя Conv1D выход будет иметь форму (Batch_size, 250, 26), а после слоя Reshape из keras я создам его (Batch_size, 250, 26, 1), который можно рассматривать как серое изображение размера ( 26) с 1 каналом. Но после прохождения через слой Reshape слой Batch_normalization выдает мне сообщение об ошибке. Вот ошибка, которую он показывает
ValueError: У операции нет градиента. Пожалуйста, убедитесь, что все ваши операции имеют определенный градиент (то есть являются дифференцируемыми). Обычные операции без градиента: K.argmax, K.round, K.eval.
Если я не использую слой batch_normalization, модель работает нормально. Но, как мы знаем, тренировать глубокую сеть без пакетной нормы сложно. Но если я не использую слой Reshape и использую выход (Batch_size, 250,26), а позже использую слои Conv1D со слоем Batch_normalization, это работает нормально. Также, если я использую слой Reshape без добавления новой оси, он работает нормально. Выдает ошибку только при добавлении новой оси в тензор.
Код для воспроизведения проблемы
def Network(eps = 0.000001, bn_momentum = 0.99,l2_reg=0.001):
input = Input(shape=(2500, 1))
t = Conv1D(26, kernel_size = 5,padding='same',kernel_regularizer=l2(l2_reg))
t = BatchNormalization(epsilon=eps, momentum=bn_momentum, axis=-1)(t)
t = Reshape(target_shape=(-1,26,1))(t)
t = Conv2D(26, kernel_size=5,
kernel_initializer=initializers.he_normal(seed=1),
padding='valid',
use_bias=True,
kernel_constraint=max_norm(10000),
trainable=trainable,
kernel_regularizer=l2(l2_reg))(t)
t = BatchNormalization(epsilon=eps, axis=-1)(t)
t = Activation(activation_function)(t)
t = Dropout(rate=dropout_rate, seed=random_seed)(t)
t = Flatten()(t)
t = Dense(20)
t = Dense(2)
opt = Adam(lr=.001,decay=.001,epsilon=eps)
model = Model(inputs=input, outputs=t)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
return model
Traceback (последний вызов был последним) :
Файл "train_layer_mf cc .py", строка 674, в initial_epoch = initial_epoch,
Файл "/ home / mhealthra2 / anaconda3 / envs / тензор / lib / python3 .7 / site-packages / keras / legacy / interfaces.py ", строка 91, в оболочке возвращает удовольствие c (* args, ** kwargs)
File" / home / mhealthra2 / anaconda3 /envs/tensor/lib/python3.7/site-packages/keras/engine/training.py ", строка 1418, в fit_generator initial_epoch = initial_epoch)
Файл" / home / mhealthra2 / anaconda3 / envs / tenor / lib / python3 .7 / site-packages / keras / engine / training_generator.py ", строка 94, в файле fit_generator callbacks.set_model (callback_model)
File" / home / mhealthra2 / anaconda3 /envs/tensor/lib/python3.7/site-packages/keras/callbacks.py ", строка 54, в set_model callback.set_model (model)
File" / media / mhealthra2 / Data / heart_sound / Состязательность-Н eart-Sound-Classification / codes / CustomTensorBoard.py ", строка 159, в весе set_model)
Файл" /home/mhealthra2/anaconda3/envs/tensor/lib/python3.7/site-packages /keras/optimizers.py ", строка 91, в get_gradients
повышение ValueError ('У операции нет градиента. 'ValueError: у операции есть None для градиента. Пожалуйста, убедитесь, что все ваши операции имеют определенный градиент (то есть являются дифференцируемыми). Обычные операции без градиента: K.argmax, K.round, K.eval.