model.compile()对于除“准确性”指标以外的所有指标均失败

时间:2020-08-25 14:25:58

标签: python tensorflow keras

我正在研究一个简单的MLP,并对此进行了编码:

let inputVal = [];
let facilityArray = [];
let distanceArray = [];
let timeArray = [];
let filteredArray = [];
let sortedArray = [];
let combined = [];
let facAddress = [];
let resultsObject, intDistanceResult;
const resetButton = document.querySelector("#refresh");


// Set data object
const data = {
    from: "xxxxxxxxx",
    // Facility id and address of each location
    select: [6, 8],
    options: {
        skip: 0,
        top: 0,
    },
};

fetchAPI = () => {
    fetch("https://api.quickbase.com/v1/records/query", {
            method: "POST",
            headers: {
                "QB-Realm-Hostname": "xxxxx.quickbase.com",
                "Authorization": "QB-USER-TOKEN xxxxxxxxxxxxxxxxxx",
                "Content-Type": "application/json",
            },
            body: JSON.stringify(data),
        })
        .then(resp => resp.json())
        .then(data => callFetch(data))
        .catch(error => console.log("Error:", error));
    console.log("fetchAPI fired")
};

callFetch = dataObject => {
    console.log("callFetch fired");
    // Map through the data object and grab the facId and address of each location
    const facId = dataObject.data.map(e => e["6"].value);
    const addresses = dataObject.data.map(e => e["8"].value);
    // Create Google Maps distance service instance
    distanceService = new google.maps.DistanceMatrixService();

    for (let i = 0; i < addresses.length; i++) {
        // Add matrix settings object
        distanceService.getDistanceMatrix({
                origins: [inputVal.toString("")],
                destinations: [addresses[i]],
                travelMode: "DRIVING",
                unitSystem: google.maps.UnitSystem.IMPERIAL,
                durationInTraffic: true,
                avoidHighways: false,
                avoidTolls: false,
            },
            // Set response and error capture
            (response, status) => {
                if (status !== google.maps.DistanceMatrixStatus.OK) {
                    console.log("Error:", status);
                    const message = document.querySelector("#message");
                    message.innerHTML = `Error: ${status}. Please resubmit.`;
                } else {
                    const distanceResult = response.rows[0].elements[0].distance
                        .text;
                    const timeResult = response.rows[0].elements[0].duration.text;
                    // Convert distanceResult values to integers and push to distanceArray to later sort
                    intDistanceResult = parseInt(distanceResult.replace(/,/g, ""));
                    // Push results to respective arrays to pass to combined object inside of sortValues function
                    facilityArray.push(facId[i]);
                    distanceArray.push(intDistanceResult);
                    timeArray.push(timeResult);
                    facAddress.push(addresses);
                }
            }
        );
    }
    renderTemplate();
};

sortValues = () => {
    console.log("sortValues fired");
    // Re-sort array of objects from getDistance function with values in order by mileage, ascending
    combined = facilityArray
        .map((facility, i) => ({
            facility,
            distance: distanceArray[i],
            time: timeArray[i],
            address: facAddress[i]
        }))
        .sort((first, second) => first.distance - second.distance);
    console.log(combined);
};

renderTemplate = async() => {
    await sortValues();
    console.log("renderTemplate fired");
    // Grab container div entry point in html
    let container = document.querySelector(".container-sm");
    for (let i = 0; i < combined.length; i++) {
        // Create html dynamically and populate based on combined' objects values
        let div = document.createElement("div");
        div.classList.add("d-inline-flex", "p-2", "mb-1");
        div.innerHTML =
            `<div class="container">
                <div class="card" style="width: 20rem; height: fixed;">
                    <div class="card-body">
                        <input class="form-control" hidden value="${inputVal.join('')}" type="text" placeholder="Destination Address" id="destaddress${i}">
                        <input class="form-control" hidden readonly type="text" placeholder="Start Address" id="startaddress${i}">
                        <h6 class="card-title" style="font-weight: bold">Service Center - ${combined[i].facility}</h6>
                        <h6 class="card-title">Distance - <span id="distance${i}">${combined[i].distance} miles</span></h6>
                        <h6 class="card-title">Drive Time - <span id="time${i}">${combined[i].time}</span></h6>
                    </div>
                </div>
            </div>`;
        // Append new values to the div
        container.appendChild(div);
    }
}

form.addEventListener("submit", (e) => {
    e.preventDefault();
    const patientAddressInput = document.querySelector("#patientaddress");
    // Get user entry and assign to inputVal in dynamically created HTML
    inputVal.push(patientAddressInput.value);
    fetchAPI();
    console.log("Listener fired");
});

resetButton.addEventListener("click", () => location.reload());

<!DOCTYPE html> <html> <head> <title>Ethos Service Center - Google Maps Distance Search</title> <link rel="stylesheet" type="text/css" href="style.css"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> </head> <body> <div class="container-sm mt-3"> <form class="form mb-3" id="form"> <div class="search"> <div class="card-body"> <div class="input-group"> <div class="input-group-prepend"> <span class="input-group-text">Patient Destination</span> </div> <input class="form-control" type="text" placeholder="Enter Zip Code" class="patientaddress" id="patientaddress" required> <div class="input-group-prepend"> <span class="input-group-text" id="message"></span> </div> </div> <hr> <button class="btn btn-primary mt-2" type="submit" id="submit">Submit</button> <button class="btn btn-outline-success mt-2 ml-3" type="reset" value="Reset" id="refresh">Clear Destination</button> </div> </div> </form> </div> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places&key=[Google Maps API Key]"></script> <script type="text/javascript" src="main.js"></script> </body> </html>中:

from keras.models import Sequential
from keras.layers import Dense
from keras import Input

def get_stats_model():

    model = Sequential()
    model.add(Dense(12, input_dim=8, activation='relu'))
    model.add(Dense(8, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    
    return model

只要指标仅为main.py,Wich就能完美运行。尝试同时使用get_stats_model() 'accuracy'时,仅使用'accuracy''AUC',例如:

'AUC'

我收到以下错误:

'mean_absolute_error'

而且我无法弄清楚为什么唯一的指标变化会导致这种错误,并且互联网上似乎没有太多信息。

我的软件包版本为:

from keras.models import Sequential
from keras.layers import Dense
from keras import Input

def get_stats_model():

    model = Sequential()
    model.add(Dense(12, input_dim=8, activation='relu'))
    model.add(Dense(8, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['AUC'])
    
    return model

谢谢。

1 个答案:

答案 0 :(得分:0)

从评论中

  1. 创建Virtual Environment
  2. Importing Keras 使用代码from tensorflow import keras

已解决了该问题。 (摘自水滴和Aniket Bote)。