我正在尝试一个基本分类,该分类要使用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的新手,可以帮忙
答案 0 :(得分:0)
@alkanen已经评论了您传递给tensor1d的值是一个数组数组。
([[val],[val]]
。
据我所知,值form.value.X
已经是浮点型的,因此您可以像[form.value.p, form.value.glu, ...]
那样简单地从它们中创建一个浮点型数组,然后将其传递给tf.tensor1d()
。
第二件事是,predict
和fit
将张量或张量数组(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
)。无论是拼写错误还是您要实现的体系结构。但是要保持连贯性,x
和y
中的数据结构是不同的。因此,您可以考虑声明您的y
也是张量1d,或者在form.value.pred
中使用它之前,请确保将x
展平。