在java中为推理过程实现前向链接和后向链接的最佳方法是什么?
我们获得了Horn形式的知识库,其中包含一系列陈述.
我试图在互联网上搜索,但我无法找到关于如何将这些人工智能概念实现到编码中的任何描述.
我的理解 :
到目前为止,我一直认为我将阅读每个句子(Horn-Form)并创建它的对象.每个Sentence类对象都有关系变量,当我要求Backward或Forward链的知识库时,它将检查这些对象的数组并构造我想要的链.
public class Sentence{
private String impliedBy;
private String implementedVar;
public Sentence(String sentence){
String[] relation = sentence.split("=>");
this.impliedBy = relation[0];
this.implementedVar = relation[1];
}
...
}
Run Code Online (Sandbox Code Playgroud)
通过说...来打电话给上课
Sentence s = new Sentence("a&b=>c");
Run Code Online (Sandbox Code Playgroud)
对于这些复杂的编程而言,我是正确的道路,并且根据我的预测,我可能需要进行大量优化才能在非常高的水平上运行这些推理.但似乎我需要一些人的理解,如果你们中的一些人可以提供帮助,谢谢你......
谢谢!
我有一个大型 Ruby 应用程序,它迫切需要添加推理引擎;我不需要很多功能,不怕集成 C 库,而且在我的谷歌搜索中空空如也。
Python 和 JVM 上似乎有很多规则引擎;虽然我更喜欢使用 Python,但我不会为了添加推理引擎而重写整个该死的应用程序,所以我真的很想看看是否存在这样的东西。
谁有想法?
我做了一个项目,基本上使用谷歌对象检测 API 和张量流。
我所做的就是使用预先训练的模型进行推理:这意味着实时对象检测,其中输入是网络摄像头的视频流或使用 OpenCV 的类似内容。
现在我得到了相当不错的性能结果,但我想进一步提高 FPS。
因为我的经验是,Tensorflow 在推理时使用了我的整个内存,但 GPU 使用率根本没有达到最大值(NVIDIA GTX 1050 笔记本电脑上约为 40%,NVIDIA Jetson Tx2 上约为 6%)。
所以我的想法是通过增加每个会话运行中输入的图像批量大小来增加 GPU 使用率。
所以我的问题是:在将输入视频流的多个帧提供给之前,如何将它们一起批处理sess.run()
?
查看我object_detetection.py
的 github 存储库上的代码:( https://github.com/GustavZ/realtime_object_detection )。
如果您能提出一些提示或代码实现,我将非常感激!
import numpy as np
import os
import six.moves.urllib as urllib
import tarfile
import tensorflow as tf
import cv2
# Protobuf Compilation (once necessary)
os.system('protoc object_detection/protos/*.proto --python_out=.')
from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as vis_util
from stuff.helper import FPS2, WebcamVideoStream
# INPUT PARAMS
# Must …
Run Code Online (Sandbox Code Playgroud) opencv inference video-processing object-detection tensorflow
我正在研究一个变分自动编码器 (VAE) 来检测时间序列中的异常。到目前为止,我使用了这个 tut https://blog.keras.io/building-autoencoders-in-keras.html和这个https://wiseodd.github.io/techblog/2016/12/10/variational-autoencoder/ .
不过,我在实施 VAE 时遇到了一些麻烦。我有 77093 个具有 1 维的样本。我使用 timesteps=100 进行预测。所以我重塑我的 x_train 如下:
x_train.shape = (77093, 100, 1)
Run Code Online (Sandbox Code Playgroud)
该模型:
inputs = Input(shape=(timesteps, input_dim))
encoded = LSTM(32)(inputs)
mu = Dense(1, activation='linear')(encoded)
log_sigma = Dense(1, activation='linear')(encoded)
z = Lambda(sample_z)([mu, log_sigma])
decoded = RepeatVector(timesteps)(z)
decoded = LSTM(1, return_sequences=True)(decoded)
decoded = LSTM(1)(decoded)
sequence_autoencoder = Model(inputs, decoded)
Run Code Online (Sandbox Code Playgroud)
我从以下样本中取样:
def sample_z(args):
mu, log_sigma = args
eps = K.random_normal(shape=(50, 1), mean=0., stddev=1.)
return mu + K.exp(log_sigma / 2) * eps
Run Code Online (Sandbox Code Playgroud)
模型编译。但我不知道它是否正确。 …
我注意到在实现泛型接口(或类)并明确说明这些泛型的类型时,不会推断子类中函数的参数类型。
interface MyInterface<T> {
open(data: T): void
}
class MyClass implements MyInterface<string> {
open(data) {
// Data should be string, but is any
}
}
Run Code Online (Sandbox Code Playgroud)
当前执行此操作的正确方法如下:
open(data: string) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,这迫使我多次输入类型,这似乎没有必要。以下会产生错误(这是预期的):
open(data: number) {
...
}
Run Code Online (Sandbox Code Playgroud)
任何不是字符串的类型都会出错,所以编译器不应该能够推断出该类型是字符串吗?
我目前正在研究使用 torch.autograd.profiler 使用两个不同 GPU 的不同 CNN 模型的半精度推理时间:
令我惊讶的是 2080 Ti明显更快(时间的一半或更短),与批量大小、输入分辨率和架构无关,尽管它的 TFLOPS不到一半。
有谁知道为什么?
import torch
import segmentation_models_pytorch as smp # pip install git+https://github.com/qubvel/segmentation_models.pytorch
runs = 10
res = 512
bs = 8
is_half = True
m = smp.Unet(encoder_name='resnet101', encoder_weights=None)
m.eval()
m.cuda()
m.half()
t = torch.rand((bs, 3, res, res)).cuda()
t = t.half()
if is_half:
m.half() …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Sagemaker 来训练和部署我的机器学习模型。至于预测,它将由 lambda 函数作为预定作业(每小时)执行。过程如下:
根据我的发现,通常输入将来自 lambda 有效载荷
data = json.loads(json.dumps(event))
payload = data['data']
print(payload)
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
ContentType='text/csv',
Body=payload)
Run Code Online (Sandbox Code Playgroud)
或从 s3 文件中读取: my_bucket = resource.Bucket('pred_data') #将其替换为您的 s3 存储桶名称。
obj = client.get_object(Bucket=my_bucket, Key='foo.csv')
lines= obj['Body'].read().decode('utf-8').splitlines()
reader = csv.reader(lines)
file = io.StringIO(lines)
response = runtime.invoke_endpoint(EndpointName=ENDPOINT,
ContentType='*/*',
Body = file.getvalue(),
Body=payload)
output = response['Body'].read().decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
由于我将从 s3 中提取原始数据并进行预处理,pandas
因此将生成一个数据帧。是否可以直接将其作为 的输入invoke_endpoint
?我可以上传的数据集中汇总到另一个S3存储,但它必须要经过decoding
,csv.reader
,StringIO
和一切就像我发现还是有一个简单的方法来做到这一点的例子吗?这decode
一步真的需要得到输出吗?
我通过以下方式在 Python 中的 tf 2.2.0 中保存了 keras 模型:
model.save('model', save_format='tf')
Run Code Online (Sandbox Code Playgroud)
它在“model”目录中给了我一个saved_model.pb。我想通过 c_api 进行推理,并且使用以下函数的代码: TF_LoadSessionFromSavedModel 工作正常。
int main() {
TF_Graph *Graph = TF_NewGraph();
TF_Status *Status = TF_NewStatus();
TF_SessionOptions *SessionOpts = TF_NewSessionOptions();
TF_Buffer *RunOpts = NULL;
const char *saved_model_dir = "model/";
const char *tags = "serve";
int ntags = 1;
TF_Session *Session = TF_LoadSessionFromSavedModel(SessionOpts, RunOpts, saved_model_dir, &tags, ntags, Graph, NULL, Status);
if (TF_GetCode(Status) == TF_OK)
{
printf("TF_LoadSessionFromSavedModel OK\n");
}
else
{
printf("%s", TF_Message(Status));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想通过 TF_GraphImportGraphDef 直接使用“model”目录中的 saving_model.pb,则会出现“Invalid GraphDef”错误: …
我正在尝试对我的自定义 YOLOv5 模型进行推理。官方文档使用默认detect.py
脚本进行推理。
例子:python detect.py --source data/images --weights yolov5s.pt --conf 0.25
我已经编写了自己的 python 脚本,但我既无法在初始化期间设置置信度阈值,也无法从模型的预测中检索它。我只能获取标签和边界框坐标。这是我的代码:
import torch
model = torch.hub.load('ultralytics/yolov5', 'custom', path_or_model='best.pt')
results = model("my_image.png")
labels, cord_thres = results.xyxyn[0][:, -1].numpy(), results.xyxyn[0][:, :-1].numpy()
Run Code Online (Sandbox Code Playgroud) 我用 Keras/TF2.5 训练了一个简单的模型并将其保存为保存模型。
tf.saved_model.save(my_model,'/path/to/model')
Run Code Online (Sandbox Code Playgroud)
如果我通过检查它
saved_model_cli show --dir /path/to/model --tag_set serve --signature_def serving_default
Run Code Online (Sandbox Code Playgroud)
我得到这些输出/名称:
inputs['conv2d_input'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 32, 32, 1)
name: serving_default_conv2d_input:0
outputs['dense'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 2)
name: StatefulPartitionedCall:0
Run Code Online (Sandbox Code Playgroud)
名称serving_default_conv2d_input
和StatefulPartitionedCall
实际上可以用于推断。
我想使用 python API 提取它们。如果我通过加载模型来查询它:
>>> m=tf.saved_model.load('/path/to/model')
>>> m.signatures['serving_default'].inputs[0].name
'conv2d_input:0'
>>> m.signatures['serving_default'].outputs[0].name
'Identity:0'
Run Code Online (Sandbox Code Playgroud)
我得到完全不同的名字。
问题:
serving_default_conv2d_input
提取这些名称?StatefulPartitionedCall
tf.saved_model.save
?:0
意思?还有附带问题:
如何通过 SavedModel 将 TF 模型部署到生产环境?