- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在做一个项目 uTensor是必须的。 uTensor 似乎工作正常,但我遇到了一个我(显然)无法自行解决的问题。
我创建了一个简单的 python 脚本,它生成模型并将其保存到文件中。稍后可以使用 uTensor-cli 将此保存的模型转换为 C++ 代码.生成的 C++ 代码将在 ARM 开发板上运行。
一切正常,没有错误。但是,当我创建如下模型时:“xW+b”,开发板上模型的输出始终等于某个静态值,这不等于 python 脚本中模型的输出。
问题是,当使用像“W+b”这样的简单模型时(此处未使用输入张量),ARM 开发板上的输出等于 python 脚本的输出。一切都按预期进行。
当使用输入张量时(没什么大的,只是一个一维数组,比如 [1,0]),ARM 开发板总是输出一些与 python 脚本的输出相比奇怪的值。当不使用输入张量时,一切都按预期工作。
因为目前还没有关于 uTensor 的 wiki,我使用了一个教程来了解 uTensor。我使用的教程可以在这里找到:https://blog.hackster.io/simple-neural-network-on-mcus-a7cbd3dc108c我编写的代码基于教程,不包含任何成本/损失函数,也无法“学习”任何东西。该代码仅供调试。
输入张量使应用程序输出意外值的原因是什么?我该如何解决这个问题?
Python 脚本
import tensorflow as tf
import numpy as np
from tensorflow.python.framework import graph_util as gu
def weightVariable(shape, name):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial, name=name)
def createLayer(layerInput, inputSize, outputSize, layerNumber, dropout = -1):
layerNumber = str(layerNumber)
#Define weight and bias
W_fc = weightVariable([inputSize, outputSize], 'W_fc' + layerNumber)
#Formula Wx+b=y
a_fc = tf.matmul(layerInput, W_fc, name='y_pred' + layerNumber)
return a_fc
def saveGraph(saver, sess, y_pred):
outNodes = [y_pred.op.name]
subGraphDef = gu.remove_training_nodes(sess.graph_def)
subGraphDef = gu.convert_variables_to_constants(sess, subGraphDef, outNodes)
#Save the checkpoint
ckptPath = saver.save(sess, "./chkps/model.ckpt")
#Save the graph
graphPath = tf.train.write_graph(subGraphDef, "./graph", "mlp.pb", as_text=False)
#Print some usefull messages
print("Saved checkpoint to: " + ckptPath)
print("Saved graph to: " + graphPath)
print("Output tensor: " + y_pred.op.name)
def restoreGraph(saver, sess):
tf.reset_default_graph()
saver.restore(sess, "./chkps/model.ckpt")
def main():
data = [
[0,0],
[0,1],
[1,0],
[1,1]
]
labels = [
[0],
[1],
[1],
[0]
]
inputSize = 2
outputSize = 1
#Placeholders for the input and output
x_input = tf.placeholder(tf.float32, [None, inputSize], name='x_input')
y_output = tf.placeholder(tf.float32, [None, outputSize], name='y_output')
#Layers with relu activation
inputLayer = createLayer(x_input, inputSize, outputSize, 0)
#Start a session
sess = tf.Session()
saver = tf.train.Saver()
#Run the session
sess.run(tf.global_variables_initializer())
feed_dict = {x_input: data, y_output: labels}
sess.run(inputLayer, feed_dict=feed_dict)
#Save the graph
saveGraph(saver, sess, inputLayer)
#Test the algorithm
for i in range(0,4):
testInput = [data[i]]
output = sess.run(inputLayer, feed_dict={x_input: testInput})[0][0]
print("Test output " + str(i) + ": " + str(output))
#End the session
sess.close()
#Execute the main function
main()
输出
Saved checkpoint to: ./chkps/model.ckpt
Saved graph to: ./graph/mlp.pb
Output tensor: y_pred0
Test output 0: 0.0
Test output 1: 0.0034507334
Test output 2: 0.07698402
Test output 3: 0.080434754
转换为 C++
utensor-cli convert graph/mlp.pb --output-nodes=y_pred0
C++代码
#include "models/mlp.hpp"
#include "tensor.hpp"
#include "mbed.h"
#include <stdio.h>
const int testData[4][2] = {{0,0},{0,1},{1,0},{1,1}};
Serial uart(USBTX, USBRX, 115200);
int main(void){
printf("Compiled at: ");
printf(__TIME__);
printf("\n");
for(int i = 0; i < 4; i++){
//Create the context class.
Context ctx;
Tensor *input_x = new WrappedRamTensor<int>({1, 2}, (int*) testData[i]);
get_mlp_ctx(ctx, input_x); //Pass the tensor to the context
S_TENSOR pred_tensor = ctx.get("y_pred0:0"); //Get the output tensor
ctx.eval(); //Trigger the inference
float prediction = *(pred_tensor->read<float>(0,0)); //Get the result
printf("Test output %d: %f \r\n", i, prediction); //Print the result
}
printf("\n");
return 0;
}
串行输出
Compiled at: (Compile time)
Test output 0: 0.000000
Test output 1: 0.000000
Test output 2: 0.000000
Test output 3: 0.000000
最佳答案
将 C++ 代码中的数据类型更改为 float 就成功了!我仍然不太确定我是怎么没想到这一点的。
关于python - uTensor 模型输出不等于预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58061538/
可不可以命名为MVVM模型?因为View通过查看模型数据。 View 是否应该只与 ViewModelData 交互?我确实在某处读到正确的 MVVM 模型应该在 ViewModel 而不是 Mode
我正在阅读有关设计模式的文章,虽然作者们都认为观察者模式很酷,但在设计方面,每个人都在谈论 MVC。 我有点困惑,MVC 图不是循环的,代码流具有闭合拓扑不是很自然吗?为什么没有人谈论这种模式: mo
我正在开发一个 Sticky Notes 项目并在 WPF 中做 UI,显然将 MVVM 作为我的架构设计选择。我正在重新考虑我的模型、 View 和 View 模型应该是什么。 我有一个名为 Not
不要混淆:How can I convert List to Hashtable in C#? 我有一个模型列表,我想将它们组织成一个哈希表,以枚举作为键,模型列表(具有枚举的值)作为值。 publi
我只是花了一些时间阅读这些术语(我不经常使用它们,因为我们没有任何 MVC 应用程序,我通常只说“模型”),但我觉得根据上下文,这些意味着不同的东西: 实体 这很简单,它是数据库中的一行: 2) In
我想知道你们中是否有人知道一些很好的教程来解释大型应用程序的 MVVM。我发现关于 MVVM 的每个教程都只是基础知识解释(如何实现模型、 View 模型和 View ),但我对在应用程序页面之间传递
我想realm.delete() 我的 Realm 中除了一个模型之外的所有模型。有什么办法可以不列出所有这些吗? 也许是一种遍历 Realm 中当前存在的所有类型的方法? 最佳答案 您可以从您的 R
我正在尝试使用 alias 指令模拟一个 Eloquent 模型,如下所示: $transporter = \Mockery::mock('alias:' . Transporter::class)
我正在使用 stargazer 创建我的 plm 汇总表。 library(plm) library(pglm) data("Unions", package = "pglm") anb1 <- pl
我读了几篇与 ASP.NET 分层架构相关的文章和问题,但是读得太多后我有点困惑。 UI 层是在 ASP.NET MVC 中开发的,对于数据访问,我在项目中使用 EF。 我想通过一个例子来描述我的问题
我收到此消息错误: Inceptionv3.mlmodel: unable to read document 我下载了最新版本的 xcode。 9.4 版测试版 (9Q1004a) 最佳答案 您没有
(同样,一个 MVC 验证问题。我知道,我知道......) 我想使用 AutoMapper ( http://automapper.codeplex.com/ ) 来验证我的创建 View 中不在我
需要澄清一件事,现在我正在处理一个流程,其中我有两个 View 模型,一个依赖于另一个 View 模型,为了处理这件事,我尝试在我的基本 Activity 中注入(inject)两个 View 模型,
如果 WPF MVVM 应该没有代码,为什么在使用 ICommand 时,是否需要在 Window.xaml.cs 代码中实例化 DataContext 属性?我已经并排观看并关注了 YouTube
当我第一次听说 ASP.NET MVC 时,我认为这意味着应用程序由三个部分组成:模型、 View 和 Controller 。 然后我读到 NerdDinner并学习了存储库和 View 模型的方法
Platform : ubuntu 16.04 Python version: 3.5.2 mmdnn version : 0.2.5 Source framework with version :
我正在学习本教程:https://www.raywenderlich.com/160728/object-oriented-programming-swift ...并尝试对代码进行一些个人调整,看看
我正试图围绕 AngularJS。我很喜欢它,但一个核心概念似乎在逃避我——模型在哪里? 例如,如果我有一个显示多个交易列表的应用程序。一个列表向服务器查询匹配某些条件的分页事务集,另一个列表使用不同
我在为某个应用程序找出最佳方法时遇到了麻烦。我不太习惯取代旧 TLA(三层架构)的新架构,所以这就是我的来源。 在为我的应用程序(POCO 类,对吧??)设计模型和 DAL 时,我有以下疑问: 我的模
我有两个模型:Person 和 Department。每个人可以在一个部门工作。部门可以由多人管理。我不确定如何在 Django 模型中构建这种关系。 这是我不成功的尝试之一 [models.py]:
我是一名优秀的程序员,十分优秀!