在 Tensorflow.js 中为预训练模型预处理图像

时间:2021-03-01 03:19:34

标签: javascript python tensorflow keras tensorflow.js

我正在尝试使用一个简单的网页将图像提供给我已经训练过的模型。当我调整图像大小并将其传递给模型时,我收到错误“未捕获(承诺)错误:model.execute(dict) 中提供的 dict['flatten_input'] 的形状必须为 [-1,9,9,512] , 但是是 [1,300,300,3]"

我不确定如何将输入重塑到这个级别 - 当我最初训练模型时,我使用了预训练模型 (VGG19) 来处理输入,但在 Tensorflow.js 中似乎不可用


<script type="text/javascript">
async function run(){

  const image = tf.browser.fromPixels(imgcanvas);
  const resized_image =
       tf.image.resizeBilinear(image, [300,300]).toFloat();
  const offset = tf.scalar(255.0);
  const normalized = tf.scalar(1.0).sub(resized_image.div(offset));
  const batchedImage = normalized.expandDims(0);
  const MODEL_URL = 'web_model/model.json';
  const model = await tf.loadGraphModel(MODEL_URL);
  const result = model.predict(batchedImage);
  result.print();
}
run();
</script>

我是不是用错了方法?我有一个替代方法,我尝试首先设置所有卷积层,然后尝试通过图像,以便它采用该结构......但它似乎也不起作用:

<script type="text/javascript">
async function run(){

  const image = tf.browser.fromPixels(imgcanvas);
  const ModelImage = tf.sequential({
    layers: [tf.layers.conv2d({inputShape=[300, 300, 3], kernelSize: (3,3),
    layers: [tf.layers.conv2d({inputShape: [300, 300, 3], kernelSize: (3,3),
  filters: 64,
  padding: 'same',
  activation: 'relu'}),
  tf.layers.conv2d({ kernelSize: (3,3),
filters: 64,
padding: 'same',
activation: 'relu'}),
tf.layers.maxPooling2d({ poolSize: (2,2),
strides: (2,2)}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 128,
padding: 'same',
activation: 'relu'}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 128,
padding: 'same',
activation: 'relu'}),
tf.layers.maxPooling2d({ poolSize: (2,2),
strides: (2,2)}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 256,
padding: 'same',
activation: 'relu'}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 256,
padding: 'same',
activation: 'relu'}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 256,
padding: 'same',
activation: 'relu'}),
tf.layers.maxPooling2d({ poolSize: (2,2),
strides: (2,2)}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 512,
padding: 'same',
activation: 'relu'}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 512,
padding: 'same',
activation: 'relu'}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 512,
padding: 'same',
activation: 'relu'}),
tf.layers.maxPooling2d({ poolSize: (2,2),
strides: (2,2)}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 512,
padding: 'same',
activation: 'relu'}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 512,
padding: 'same',
activation: 'relu'}),
tf.layers.conv2d({ kernelSize: (3,3),
filters: 512,
padding: 'same',
activation: 'relu'}),
tf.layers.maxPooling2d({ poolSize: (2,2),
strides: (2,2)}),
           ]
  })
  const MODEL_URL = 'web_model/model.json';
  const model = await tf.loadGraphModel(MODEL_URL);
  const result = model.predict(ModelImage);
  result.print();
}
run();
</script>

0 个答案:

没有答案