tensorflow js中的错误'The feature data generated by the dataset lacks the required input key'是什么意思?

What does the error 'The feature data generated by the dataset lacks the required input key' mean in tensorflow js?

错误Uncaught (in promise) Error: The feature data generated by the dataset lacks the required input key 'dense_Dense1_input'.是什么意思?我尝试了不同的方法来解决这个问题,例如不同的输入形状和不同的批量大小,但似乎没有任何效果。我有一个包含 484 个特征和 30 行的数据输入,以及一个包含 1 列和 30 行的标签集。

准确的错误是:

Uncaught (in promise) Error: The feature data generated by the dataset lacks the required input key 'dense_Dense1_input'.
    at new e (errors.ts:48)
    at Wd (training_dataset.ts:277)
    at Pd (training_dataset.ts:222)
    at training_dataset.ts:421
    at common.ts:14
    at Object.next (common.ts:14)
    at o (common.ts:14)

我的代码

<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.5.2/dist/tf.min.js"></script>
<title>test</title>             
</head>
<body>
<script>

const csvUrlData = '/image_data.csv';
const csvUrlLabel = '/number_data.csv';
const headers_image = Array.from(Array(484).keys());
const headers_image_string = headers_image.map(String);

async function run() {
  const csvDataset = tf.data.csv(
    csvUrlData,{
        hasHeader: false,
        columnNames: headers_image_string
    });
  const csvLabelset = tf.data.csv(
    csvUrlLabel, {
        columnConfigs: {
            label_numbers: {
                isLabel: true
            }
        }
    }
  );

  const flattenedDataset = tf.data.zip({xs: csvDataset, ys: csvLabelset}).batch(5);

  const model = tf.sequential();
  model.add(tf.layers.dense({
    inputShape: [484],
    units: 1
  }));
  model.compile({
    optimizer: tf.train.sgd(0.00000001),
    loss: 'meanSquaredError'
  });

  return await model.fitDataset(flattenedDataset, {
    epochs: 10,
    callbacks: {
      onEpochEnd: async (epoch, logs) => {
        console.log(epoch + ':' + logs.loss);
      }
    }
  });
}
run();
</script>
</body>
</html>

isLabel 属性 不应在 labelDataset 中使用,因为数据是在之后压缩的。这将为标签创建一个嵌套对象。如果必须使用,则需要使用运算符 map 来仅检索 labelDataset.

ys 属性
  const csvDataset = tf.data.csv(
    csvUrlData,{
        hasHeader: false,
        columnNames: headers_image_string
    });
  const csvLabelset = tf.data.csv(
    csvUrlLabel, {
        columnConfigs: {
            label_numbers: {
                isLabel: true
            }
        }
    }
  );

  const flattenedcsvDataset =
    csvDataset
    .map((data) =>
      {
        return Object.values(data)
      })

  const flattenedcsvLabelset =
    csvDataset
    .map((data) =>
      {
        return Object.values(data)
      })

  const flattenedDataset = tf.data.zip({xs: flattenedcsvDataset, ys: flattenedcsvLabelset}).batch(5);

然后 flattenedDataset 可以用于训练。

const csvUrl =
'https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv';

(async function run() {
 
  const csvDataset = tf.data.csv(
    csvUrl, {
      columnConfigs: {
       /* medv: {
          isLabel: true
        }*/
      }
    });

  // Number of features is the number of column names minus one for the label
  // column.
  const numOfFeatures = (await csvDataset.columnNames()).length ;

  // Prepare the Dataset for training.
  const flattenedDataset =
    csvDataset
    .map((data) =>
      {
      return Object.values(data)
      })
  
  const zip = tf.data.zip({xs: flattenedDataset, ys: flattenedDataset}).batch(10)
  
  // Define the model.
  const model = tf.sequential();
  model.add(tf.layers.dense({
    inputShape: [numOfFeatures],
    units: numOfFeatures
  }));
  model.compile({
    optimizer: tf.train.sgd(0.000001),
    loss: 'meanSquaredError'
  });

  // Fit the model using the prepared Dataset
  return model.fitDataset(zip, {
    epochs: 10,
    callbacks: {
      onEpochEnd: async (epoch, logs) => {
        console.log(epoch + ':' + logs.loss);
      }
    }
  });
})()
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.5.2/dist/tf.min.js"></script>
<title>test</title>             
</head>
<body>
<script>


</script>
</body>
</html>