Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在tensorflow.js模型中添加图像并为给定的图像标签训练模型_Tensorflow_Keras_Image Recognition_Tensor_Tensorflow.js - Fatal编程技术网

如何在tensorflow.js模型中添加图像并为给定的图像标签训练模型

如何在tensorflow.js模型中添加图像并为给定的图像标签训练模型,tensorflow,keras,image-recognition,tensor,tensorflow.js,Tensorflow,Keras,Image Recognition,Tensor,Tensorflow.js,我们正在使用TensorFlow.js创建和训练模型。我们使用tf.fromPixels()函数将图像转换为张量。 我们要创建具有以下属性的自定义模型: AddImage(HTML_Image_元素,'Label'):添加带有自定义标签的imageElement Train()/fit():使用相关标签训练此自定义模型 Predict():预测带有相关标签的图像,它将返回带有每个图像的附加标签的预测响应。 为了更好地理解,让我们举一个例子: 假设我们有三个图像用于预测,即:img1、img2、i

我们正在使用TensorFlow.js创建和训练模型。我们使用tf.fromPixels()函数将图像转换为张量。 我们要创建具有以下属性的自定义模型:

AddImage(HTML_Image_元素,'Label'):添加带有自定义标签的imageElement Train()/fit():使用相关标签训练此自定义模型 Predict():预测带有相关标签的图像,它将返回带有每个图像的附加标签的预测响应。 为了更好地理解,让我们举一个例子: 假设我们有三个图像用于预测,即:img1、img2、img3,分别有三个标签“A”、“B”和“C”。 因此,我们想用这些图像和相应的标签创建和训练我们的模型,如下所示: 当用户想要预测“img1”时,它会显示预测“A”,类似地,“img2”预测用“B”表示,而“img3”预测用“C”表示

请向我建议如何创建和培训此模型

这是我们用来创建带有图像及其关联标签的模型的网页:
基于TensorFlowJS的图像分类器
异步函数learnlinear(){
//img数据集
const imageHTML=document.getElementById('imgshow');
log('imageHTML::'+imageHTML.src);
//转换为张量
const tensorImg=tf.fromPixels(imageHTML);
tensorImg.data().then(异步函数(stuffTensImg){
log('stuffTensImg::'+stuffTensImg.toString());
});
const model=tf.sequential();
model.add(tf.layers.conv2d({
内核大小:5,
过滤器:20,
步幅:1,
激活:“relu”,
inputShape:[imageHTML.height,imageHTML.width,3],
}));
model.add(tf.layers.maxPooling2d({
池大小:[2,2],
步幅:[2,2],
}));
model.add(tf.layers.flatte());
模型添加(tf.layers.dropout(0.2));
//两个输出值x和y
model.add(tf.layers.dense({
单位:2,,
激活:“tanh”,
}));
//使用ADAM优化器,学习率为0.0005,MSE损失
model.compile({
优化器:tf.train.adam(0.0005),
损失:“平均平方误差”,
});
wait model.fit(tensorImg,{epochs:500});
model.predict(tensorImg).print();
}
学习线性();

TLDR:您只需使用
np.expand_dims()
np.reformate()
调整数据大小即可

首先,让我们生成一些模拟当前张量输入的随机张量-

# Some random numpy array
In [20]: x = np.random.random((2,2,4))

In [21]: x
Out[21]: 
array([[[0.8454901 , 0.75157647, 0.1511371 , 0.53809724],
        [0.50779498, 0.41321185, 0.45686143, 0.80532259]],

       [[0.93412402, 0.02820063, 0.5452628 , 0.8462806 ],
        [0.4315332 , 0.9528761 , 0.69604215, 0.538589  ]]])

# Currently your tensor is a similar 3D shape like x
In [22]: x.shape
Out[22]: (2, 2, 4)

现在你可以把它转换成4D张量,就像这样-

[23]: y = np.expand_dims(x, axis = 3)

In [24]: y
Out[24]: 
array([[[[0.8454901 ],
         [0.75157647],
         [0.1511371 ],
         [0.53809724]],

        [[0.50779498],
         [0.41321185],
         [0.45686143],
         [0.80532259]]],


       [[[0.93412402],
         [0.02820063],
         [0.5452628 ],
         [0.8462806 ]],

        [[0.4315332 ],
         [0.9528761 ],
         [0.69604215],
         [0.538589  ]]]])

In [25]: y.shape
Out[25]: (2, 2, 4, 1)
您可以找到
np.expand\u dims
文档


编辑:这里有一行

np.reshape(np.ravel(x), (x.shape[0], x.shape[1], x.shape[2], 1)).shape 

您可以查看
np.重塑
文档。

您只需重塑张量数据

传入模型的数据应该比inputShape大一个维度。实际上,
predict
接受一个shape
InputShape
元素数组。元素的数量是批次大小。因此,图像数据应具有以下形状
[batchsize,…inputShape]
(使用省略号for rest参数指示形状的后面部分等于
inputShape

由于您只使用一个元素进行培训(在实际情况中不会发生这种情况),因此只需使用batchsize 1即可

model.predict(tensorImg.expandDims(0)).print()

你的错误信息非常直截了当。预期的张量为
4
,但它收到的输入为
300400,3
。只需将数据整形为4维,就像
np一样。使用resize\u image=tf扩展\u dims(一些np数组,轴=3)
即可。整形(tensorImg,[-1300,300,4])可调整大小,但仍然会给出相同的错误:检查输入时出错:预期conv2d\u Conv2D1\u输入具有4维。但是得到了形状为300400,3的数组,在传递输入时可能没有使用
resize\u image
。另外,它不应该是
resize_image=tf.restrape(tensorImg,[-1300,400,3])
?现在我用一个图像对象进行了成功的训练。因为我的任务是基于图像标签/图像识别,所以我们希望将“标签”与每个图像关联起来。因此,当我们尝试使用图像和标签来训练模型时,模型不会将标签存储在他的“model.json”文件中。所以你能指导我们训练一个带标签的图像吗?现在我用一个图像对象进行了一次成功的训练。因为我的任务是基于图像标签/图像识别,所以我们希望将“标签”与每个图像关联起来。因此,当我们尝试使用图像和标签来训练模型时,模型不会将标签存储在他的“model.json”文件中。所以,你能不能指导我们训练一个带有标签的图像呢?@Adarsh4sfdc不清楚你在问什么。培训时总是有标签。所以我不明白你所说的“有标签的培训”和“没有标签的培训”有什么区别。考虑在一个新的职位上详细询问你的新问题。如果上面的答案对你有所帮助,别忘了投票并将其标记为已接受:)@edkevek你能帮我吗@Greyfrog我去看看