Проблема при использовании данных из tf.data.csv в методе model.evaluate в Tensorflow. js - PullRequest
1 голос
/ 16 января 2020

Как я могу использовать возвращенные значения 'tf.data.csv' в методе оценки'valu () 'в Tensorflow. js?

Я хотел обучить простую модель на TF JS. Сначала я читаю данные из файла CSV. Затем я обучил модель и, наконец, рассчитал потери и точность. Но я не смог измерить точность в тестовом наборе данных, который импортируется из 'tf.data.csv'.

<html>
<head></head>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"></script>
    <script lang="js">
        
        async function run(){
            const trainingUrl = 'wdbc-train.csv';
            const trainingData = tf.data.csv(trainingUrl, {
                columnConfigs: {
                    diagnosis:{
                        isLabel: true
                    }
                }
             });
            const numOfFeatures = (await trainingData.columnNames()).length - 1;
            const numOfSamples= 455

            const convertedData =
                  trainingData.map(({xs, ys}) => {
                      const labels = [
                            ys.diagnosis == 1 ? 1 : 0
                             ] 
                      return{ xs: Object.values(xs), ys: Object.values(labels)};
                  }).batch(20);
                  
            const testingUrl = 'wdbc-test.csv';
            
           
            const testingData = tf.data.csv(testingUrl, {
                 columnConfigs: {
                    diagnosis:{
                        isLabel: true
                    }
                }
                
                              
            });
            
       
            const convertedTestingData = // YOUR CODE HERE
                  testingData.map(({xs, ys}) => {
                      const labels = [
                            ys.diagnosis == 1 ? 1 : 0
                             ] 
                      return{ xs: Object.values(xs), ys: Object.values(labels)};
                  }).batch(10);
       
            const numOfTestFeatures = (await testingData.columnNames()).length - 1;
            const a =testingData.toArray()
            console.log(a)
          
            const model = tf.sequential();
            model.add(tf.layers.dense({inputShape: [numOfFeatures], activation: "relu", units: 10}));
            model.add(tf.layers.dense({inputShape: 10 , activation: "relu", units: 10}));
           
           model.add(tf.layers.dense({activation: "sigmoid", units: 1}));                
           model.compile({loss: "binaryCrossentropy", optimizer: tf.train.rmsprop(0.05),metrics: "accuracy"});
             await model.fitDataset(convertedData, 
                             {epochs:2,
                              callbacks:{
                                  onEpochEnd: async(epoch, logs) =>{
                                      console.log("Epoch: " + epoch + " Loss: " + logs.loss );
                                                 

                                  }
                              }});
            
             const result = model.evaluateDataset(convertedData,{batchSize: 10});
            console.log("Accuracy: " + result);
           
            await model.save('downloads://my_model');

        }
        run();
    </script>
<body>
</body>
</html>

1 Ответ

1 голос
/ 16 января 2020

tf.data.csv возвращает tf.data.Dataset. Метод evaluate предполагает tensor или массив tensor. Если вы хотите оценить tf.data.Dataset, вместо него можно использовать метод evaluateDataset.

evaluateDataset возвращает обещание.

const data = await model.evaluateDataset(testingData) 
// data can be a tf.Scalar or an array of tf.Scalar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...