Python 切分中的kears损失
我正在尝试创建一个图像分割模型,但当我尝试拟合该模型时,我仍然认为nan是一个损失,我不明白为什么 似乎一开始就是这样。 我尝试搜索,有人建议输出层应该是softmax,但这已经实现了 当我试着去适应的时候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
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)还是其他什么?