Python 切分中的kears损失

Python 切分中的kears损失,python,tensorflow,keras,image-segmentation,Python,Tensorflow,Keras,Image Segmentation,我正在尝试创建一个图像分割模型,但当我尝试拟合该模型时,我仍然认为nan是一个损失,我不明白为什么 似乎一开始就是这样。 我尝试搜索,有人建议输出层应该是softmax,但这已经实现了 当我试着去适应的时候 model.fit(x=train_dataset, epochs=10, #### set repeat in training dataset steps_per_epoch=len(train_img_gen), valid

我正在尝试创建一个图像分割模型,但当我尝试拟合该模型时,我仍然认为nan是一个损失,我不明白为什么

似乎一开始就是这样。 我尝试搜索,有人建议输出层应该是softmax,但这已经实现了

当我试着去适应的时候

model.fit(x=train_dataset,
          epochs=10,  #### set repeat in training dataset
          steps_per_epoch=len(train_img_gen),
          validation_data=valid_dataset,
          validation_steps=len(valid_img_gen), 
          )
Train for 5988 steps, validate for 880 steps
Epoch 1/10
   3/5988 [..............................] - ETA: 2:24:44 - loss: nan 
我使用的是这个模型:

def create_model(depth, start_f, num_classes, dynamic_input_shape):

   model = tf.keras.Sequential()

   # Encoder
   # -------
   for i in range(depth):

       if i == 0:
           if dynamic_input_shape:
               input_shape = [None, None, 3]
           else:
               input_shape = [img_h, img_w, 3]
       else:
           input_shape=[None]

       model.add(tf.keras.layers.Conv2D(filters=start_f, 
                                        kernel_size=(3, 3),
                                        strides=(1, 1),
                                        padding='same',
                                        input_shape=input_shape))
       model.add(tf.keras.layers.ReLU())
       model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))

       start_f *= 2

   # Decoder
   # -------
   for i in range(depth):
       model.add(tf.keras.layers.UpSampling2D(2, interpolation='bilinear'))
       model.add(tf.keras.layers.Conv2D(filters=start_f // 2,
                                        kernel_size=(3, 3),
                                        strides=(1, 1),
                                        padding='same'))

       model.add(tf.keras.layers.ReLU())

       start_f = start_f // 2

   # Prediction Layer
   # ----------------
   model.add(tf.keras.layers.Conv2D(filters=num_classes,
                                    kernel_size=(1, 1),
                                    strides=(1, 1),
                                    padding='same',
                                    activation='softmax'))

   return model
 model = create_model(depth=4, 
                    start_f=4, 
                    num_classes=3, 
                    dynamic_input_shape=False)
数据集是这样创建的

# Training
# --------
train_dataset = tf.data.Dataset.from_generator(lambda: train_gen,
                                              output_types=(tf.float32, tf.float32),
                                              output_shapes=([None, img_h, img_w, 3], [None, img_h, img_w, 3]))

def prepare_target(x_, y_):
   y_ = tf.cast(tf.expand_dims(y_[..., 0], -1), tf.int32)
   return x_, tf.where(y_ > 0, y_ - 1, y_ + 1)

train_dataset = train_dataset.map(prepare_target)

# Repeat
train_dataset = train_dataset.repeat()



谢谢你的帮助

你在哪里编译的模型?您在那里使用的优化和损失函数是什么?检查用于培训的数据集是否包含任何nan。要检查nan,我应该执行tf.math。是nan(Train_数据集,name=None)还是其他什么?