Я думаю, что проблема в том, что с K.max(subgrid) == K.min(subgrid)
вы создаете python логическое , сравнивающее два тензорных объекта, а не тензор потока булева , содержащее значение сравнения значения двух входных тензоров.
Другими словами, то, что вы написали, будет оцениваться как
K.switch(True, lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)
вместо
comparison = ... # Some tensor, that at runtime will contain True if min and max are the same, False otherwise.
K.switch(comparison , lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)
Так что вам нужно использовать keras.backend.equal () вместо ==
:
K.switch(K.equal(K.max(subgrid),K.min(subgrid)), lambda: tf.add(cur_subgrid,1), lambda: cur_subgrid)