【问题标题】:Train and Test accuracy separately in Keras在 Keras 中分别训练和测试准确性
【发布时间】:2021-08-11 09:35:27
【问题描述】:

这是我的模型:

def evaluate_model(X_train, y_train,X_test,y_test):

  verbose=1
  epochs=50
  batch_size = 32
  
  n_outputs = 1
  model = Sequential()
  model.add(Conv1D(filters=32, kernel_size=6, activation='relu', input_shape=(25,1)))
  model.add(Conv1D(filters=32, kernel_size=6, activation='relu'))
  model.add(Dropout(0.3))
  model.add(MaxPooling1D(pool_size=2))
  model.add(Flatten())
  model.add(Dense(100, activation='relu'))
  model.add(Dense(n_outputs, activation='sigmoid'))
  model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  # fit network
  model.fit(X_train, y_train,epochs=50, batch_size=batch_size, verbose=1)
      # evaluate model
  _, accuracy = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=1)
  return accuracy
  
# summarize scores
def summarize_results(scores):
    print(scores)
    m, s = mean(scores), std(scores)
    print('Accuracy: %.3f%% (+/-%.3f)' % (m, s))
 
# run an experiment
def run_experiment(repeats=5):

    # repeat experiment
    scores = list()
    for r in range(repeats):
        score = evaluate_model(X_train, y_train,X_test,y_test)
        score = score * 100.0
        print('>#%d: %.3f' % (r+1, score))
        scores.append(score)
    # summarize results
    summarize_results(scores)

# run the experiment
run_experiment()

如何分别获得训练和测试准确度?现在我只能通过model.evaluate 获得测试准确性。

【问题讨论】:

    标签: python machine-learning keras deep-learning


    【解决方案1】:

    您获得的准确度取决于您对model.evaluate() 使用的参数;如果将X_testy_test 分别替换为X_trainy_train,您将获得训练精度。因此,要同时获得两者,您应该将 evaluate_model 函数的最后几行修改为:

    _, train_accuracy = model.evaluate(X_train, y_train, batch_size=batch_size, verbose=1)
    _, test_accuracy = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=1)
    return train_accuracy, test_accuracy
    

    【讨论】:

    • 如果我在 model.fit 中执行 verbose=1 .. 它在那里显示的准确度是多少?训练还是测试?
    • @ubuntu_noob 它们对应的是training loss和accuracy,否则会显示validation_loss等
    • @ubuntu_noob 因为你没有在model.fit 中提供验证集,它只会显示训练损失和准确率;如果你提供了一个额外的参数validation_data=(X_test, y_test),它会显示训练和测试的损失和准确性。请参阅documentation
    • @desertnaut 来自 model.evaluate 的测试准确度,如果我们将 validation_data=(X_test, y_test) 和 verbose=1 放在 model.fit 中...两者的测试准确度是一样的吗?因为两者都在扮演同样的角色?
    • @ubuntu_noob 原则上是的;但由于 Keras 在训练过程中计算准确率的方式可能存在一些差异。这样的案例在这里产生了相当多的相关问题......
    猜你喜欢
    • 2017-06-13
    • 2017-10-09
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多