tensor1d要求值是一个flat / typedarray

时间:2018-08-09 08:45:04

标签: python angularjs tensorflow keras tensorflow.js

我正在尝试一个基本分类,该分类要使用8个输入来预测一个人是否患有糖尿病。 我已经使用keras训练了模型

  X =数据集[:,0:8]
Y =数据集[:,8]
模型= Sequential()
model.add(Dense(12,input_dim = 8,kernel_initializer ='uniform',
activation ='relu'))
model.add(密集(8,kernel_initializer ='统一',激活='relu'))
model.add(Dense(1,kernel_initializer ='uniform',
Activation ='Sigmoid'))
model.compile(loss ='binary_crossentropy',优化器='adam',指标=
['准确性'])
x_train,x_test,y_train,y_test = train_test_split(X,Y,
test_size = 0.3,random_state = 25)
model.fit(x_train,y_train,batch_size = 20,epochs = 100,verbose = 1,
validation_data = [x_test,y_test))
分数= model.evaluate(x_train,y_train,verbose = 0)
打印(“%s:%。2f %%”%(model.metrics_names [1],分数[1] * 100))
model.save('logreg.h5')
 

现在使用tensforjs_convertor我已经将 logreg.h5转换为model.json

这是我的 app.component.ts ,我要在其中使用经过训练的模型并进行预测

  async loadModel(){
this.model =等待tf.loadModel('/ assets / model.json');
}
异步提交(窗体:NgForm){
this.loading = true;
var x = tf.tensor1d([[form.value.p],[form.value.glu],
[form.value.bp],[form.value.sk],[form.value.insulin],
[form.value.bmi],[form.value.op],[form.value.a],
[form.value.pred],]);
var y = tf.tensor2d([form.value.pred])
const output = this.model.predict(tf.tensor1d([x]))as any;
 

我正在从html中获取表单值  运行项目后,浏览器中的控制台显示以下错误, tensor1d要求值是平面/类型数组

我是这个keras和tensorflowjs的新手,可以帮忙

2 个答案:

答案 0 :(得分:0)

@alkanen已经评论了您传递给tensor1d的值是一个数组数组。 ([[val],[val]]

据我所知,值form.value.X已经是浮点型的,因此您可以像[form.value.p, form.value.glu, ...]那样简单地从它们中创建一个浮点型数组,然后将其传递给tf.tensor1d()

第二件事是,predictfit将张量或张量数组(Reference)作为参数进行批处理,因此您可以像{{ 1}}。

答案 1 :(得分:0)

  

要求值是平面/类型数组

表示作为参数传递给张量的数组的尺寸或等级存在问题。

tf.tensor1d要求参数为平面数组(深度为1的数组),这意味着该数组不应嵌套[1, 2, 3]

同样,tf.tensor2d要求参数为深度2的数组,它应类似于[[1, 2], [3,4]]

要解决此问题:

x = tf.tensor1d([form.value.p, form.value.glu, form.value.bp, form.value.sk, form.value.insulin,form.value.bmi, form.value.op, form.value.a, form.value.pred])

您声明y为张量2d,form.value.pred既用作要素(x)又用作标签(y)。无论是拼写错误还是您要实现的体系结构。但是要保持连贯性,xy中的数据结构是不同的。因此,您可以考虑声明您的y也是张量1d,或者在form.value.pred中使用它之前,请确保将x展平。