【发布时间】:2018-08-09 08:45:03
【问题描述】:
我正在尝试使用 8 个输入来预测一个人是否患有糖尿病的基本分类。 我已经使用 keras 训练了模型
X = dataset[:,0:8]
Y = dataset[:,8]
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer='uniform',
activation='relu'))
model.add(Dense(8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(1, kernel_initializer='uniform',
activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=
['accuracy'])
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))
scores = model.evaluate(x_train, y_train, verbose=0)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
model.save('logreg.h5')
现在使用 tensforjs_convertor 我已将 logreg.h5 转换为 model.json
这是我的 app.component.ts,我想在其中使用经过训练的模型并进行预测
async loadModel() {
this.model = await tf.loadModel('/assets/model.json');
}
async submit(form: 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 requires value to be a flat/ typedarray
我是这个 keras 和 tensorflowjs 的新手,有人可以帮忙
【问题讨论】:
-
你为什么要给 tf.tensor1d() 提供一个数组?不应该只需要 [form.value.p, form.value.glu, ...] 吗?我可能完全误解了您的代码,因为我通常在 python 中执行此操作,但这对我来说有点奇怪。看起来您正在为 1d 张量提供 2d 数据块。
-
我正在尝试将 AngularJs 用于前端,使用 keras 预训练模型并集成到我的前端,因此如果用户提供输入,他可以通过调用 keras 预训练模型来获得输出。我已经通过 form.value.p 尝试过,它给了我以下错误:检查模型时出错:您传递给模型的张量数组不是模型预期的大小。预计会看到 1 个张量,但得到了 9 个张量。 @alkanen
-
当您遇到该错误时,能否显示“var x =”的整行?
-
您还将 var x 创建为 tensor1d,然后当您将其发送到 predict 时,将该 tensor1d 放入您输入到新 tensor1d 的数组中。为什么不直接运行 this.model.predict(x) ?
标签: python angularjs tensorflow keras tensorflow.js