【问题标题】:Evaluating Pretrained Tensorflow keras model using various loss functions使用各种损失函数评估预训练的 Tensorflow keras 模型
【发布时间】:2021-12-06 13:03:21
【问题描述】:

我正在寻找一种方法来评估使用各种损失函数(例如 MAEMSE、....损失函数类型作为参数,是否可以在每次我们想用新的损失函数评估时不需要重新编译模型?最简单的方法是什么?

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    您可以使用多个损失函数而无需重新编译;您所要做的就是假设 First Loss Method 为 Loss 1,Second 为 Loss 2。

    optimizer1 = tf.train.AdamOptimizer().minimize(loss1)
     
    optimizer2 = tf.train.AdamOptimizer().minimize(loss2)
    
    _, _, l1, l2 = sess.run(fetches=[optimizer1, optimizer2, loss1, loss2], feed_dict={x: batch_x, y: batch_y})
    

    对不起,写代码不方便,我是新来的

    【讨论】:

      【解决方案2】:

      您可以使用新指标重新编译您的模型。我相信你需要新的评估指标,而不是新的损失。

      例如,定义这样的模型:

      import tensorflow as tf
      
      (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
      
      model = tf.keras.Sequential([
          tf.keras.layers.Flatten(input_shape=(x_train.shape[1:])),
          tf.keras.layers.Dense(128, activation="relu"),
          tf.keras.layers.Dense(128, activation="relu"),
          tf.keras.layers.Dense(10, activation="softmax"),
      ])
      
      model.compile(loss="sparse_categorical_crossentropy", metrics=["accuracy"], optimizer="adam")
      model.fit(x_train, y_train, epochs=3, validation_split=0.2)
      model.evaluate(x_test, y_test) 
      # 313/313 [=================] - 1s 3ms/step - loss: 0.2179 - accuracy: 0.9444
      

      然后你可以像这样重新编译和评估:

      # Change metrics
      model.compile(metrics=["mae", "mse"], loss="sparse_categorical_crossentropy")
      model.evaluate(x_test, y_test)
      # 313/313 [=================] - 1s 3ms/step - loss: 0.2179 - mae: 4.3630 - mse: 27.3351
      

      【讨论】:

        猜你喜欢
        • 2018-10-22
        • 2019-04-28
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        相关资源
        最近更新 更多