Python Tensorflow Keras模型在拟合时存在nan损失

Python Tensorflow Keras模型在拟合时存在nan损失,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我有一个tensorflow keras模型,我想用获得的数据进行训练。但是,在训练时,在第一个历元之后,nan会丢失。输入的范围为[-1 | 1] 这是我的型号: x = Input(shape=(8, 8, 7), name='input') value_head = Conv2D( filters=1, kernel_size=(1, 1), padding='same', use_bias=False, a

我有一个tensorflow keras模型,我想用获得的数据进行训练。但是,在训练时,在第一个历元之后,nan会丢失。输入的范围为[-1 | 1]

这是我的型号:

x = Input(shape=(8, 8, 7), name='input')

value_head = Conv2D(
        filters=1,
        kernel_size=(1, 1),
        padding='same',
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
    )(x)

value_head = BatchNormalization()(value_head)

value_head = LeakyReLU()(value_head)

value_head = Flatten()(value_head)

value_head = Dense(
        20,
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
    )(x)

value_head = LeakyReLU()(value_head)

value_head  = Dense(
        1,
        use_bias=False,
        activation='tanh',
        kernel_regularizer=regularizers.l2(0.0001),
        name='value_head',
    )(value_head)

policy_head = Conv2D(
        filters=2,
        kernel_size=(1, 1),
        padding='same',
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
    )(x)

policy_head  = BatchNormalization()(policy_head)

policy_head  = LeakyReLU()(policy_head)

policy_head  = Flatten()(policy_head)

policy_head = Dense(
        self.mOutputDim,
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
        name='policy_head',
    )(x)

model = Model(inputs=[nn_input], outputs=[value_head, policy_head])

model.compile(loss={'value_head': 'mean_squared_error', 'policy_head': softmax_cross_entropy_with_logits},
                  optimizer=SGD(lr=0.00001, momentum=0.9),
                  loss_weights={'value_head': 0.5, 'policy_head': 0.5}
                  )
training_states = np.array(
            [self.mAI.convert_training_state_node_to_model_input(current_node)
             .reshape((8, 8, 7))
             for current_node in training_data.mTrainingStateNodes])

training_targets = {
            'value_head': np.array([np.array([training_data.mWinner])]),
            'policy_head': np.array([current_node.convert_edges_visit_count_to_policy_map()
                                   for current_node in training_data.mTrainingStateNodes])}

fit = model.fit(training_states,
                training_targets,
                epochs=3,
                verbose=1,
                validation_split=0,
                batch_size=64)
培训内容如下:

x = Input(shape=(8, 8, 7), name='input')

value_head = Conv2D(
        filters=1,
        kernel_size=(1, 1),
        padding='same',
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
    )(x)

value_head = BatchNormalization()(value_head)

value_head = LeakyReLU()(value_head)

value_head = Flatten()(value_head)

value_head = Dense(
        20,
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
    )(x)

value_head = LeakyReLU()(value_head)

value_head  = Dense(
        1,
        use_bias=False,
        activation='tanh',
        kernel_regularizer=regularizers.l2(0.0001),
        name='value_head',
    )(value_head)

policy_head = Conv2D(
        filters=2,
        kernel_size=(1, 1),
        padding='same',
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
    )(x)

policy_head  = BatchNormalization()(policy_head)

policy_head  = LeakyReLU()(policy_head)

policy_head  = Flatten()(policy_head)

policy_head = Dense(
        self.mOutputDim,
        use_bias=False,
        activation='linear',
        kernel_regularizer=regularizers.l2(0.0001),
        name='policy_head',
    )(x)

model = Model(inputs=[nn_input], outputs=[value_head, policy_head])

model.compile(loss={'value_head': 'mean_squared_error', 'policy_head': softmax_cross_entropy_with_logits},
                  optimizer=SGD(lr=0.00001, momentum=0.9),
                  loss_weights={'value_head': 0.5, 'policy_head': 0.5}
                  )
training_states = np.array(
            [self.mAI.convert_training_state_node_to_model_input(current_node)
             .reshape((8, 8, 7))
             for current_node in training_data.mTrainingStateNodes])

training_targets = {
            'value_head': np.array([np.array([training_data.mWinner])]),
            'policy_head': np.array([current_node.convert_edges_visit_count_to_policy_map()
                                   for current_node in training_data.mTrainingStateNodes])}

fit = model.fit(training_states,
                training_targets,
                epochs=3,
                verbose=1,
                validation_split=0,
                batch_size=64)

我非常感谢您对我的问题提出的解决方案和建设性的批评。

这可能是因为提供了错误的输入激活函数或输出激活函数……请进行更改,然后再试一次。我尝试了其他一些函数,但在培训过程中没有任何更改。请尝试将Y值更改为浮点型。@t不幸的是,这并没有改变任何事情。