- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的 Swift 应用程序中使用此代码库 ( Slot-Filling-Understanding-Using-RNNs ) 创建的一些模型。
我能够将 lstm_nopooling
、lstm_nopooling300
和 lstm
转换为 CoreML。
在model.py
中我使用了以下代码:
def save_model(self):
joblib.dump(self.summary, 'models/' + self.name + '.txt')
self.model.save('models/' + self.name + '.h5')
try:
coreml_model = coremltools.converters.keras.convert(self.model, input_names="main_input", output_names=["intent_output","slot_output"])
coreml_model.save('models/' + self.name + '.mlmodel')
except:
pass
print("Saved model to disk")
我正在尝试将向量转换回意图和插槽。
我有这个,但是
func tokenizeSentences(instr: String) -> [Int] {
let s = instr.lowercased().split(separator: " ")
var ret = [Int]()
if let filepath = Bundle.main.path(forResource: "atis.dict.vocab", ofType: "csv") {
do {
let contents = try String(contentsOfFile: filepath)
print(contents)
var lines = contents.split { $0.isNewline }
var pos = 0
for word in s {
if let index = lines.firstIndex(of: word) {
print(index.description + " " + word)
ret.append(index)
}
}
return ret
} catch {
// contents could not be loaded
}
} else {
// example.txt not found!
}
return ret
}
func predictText(instr:String) {
let model = lstm_nopooling300()
guard let mlMultiArray = try? MLMultiArray(shape:[20,1,1],
dataType:MLMultiArrayDataType.int32) else {
fatalError("Unexpected runtime error. MLMultiArray")
}
let tokens = tokenizeSentences(instr: instr)
for (index, element) in tokens.enumerated() {
mlMultiArray[index] = NSNumber(integerLiteral: element)
}
guard let m = try? model.prediction(input: lstm_nopooling300Input.init(main_input: mlMultiArray))
else {
fatalError("Unexpected runtime error. MLMultiArray")
}
let mm = m.intent_output
let length = mm.count
let doublePtr = mm.dataPointer.bindMemory(to: Double.self, capacity: length)
let doubleBuffer = UnsafeBufferPointer(start: doublePtr, count: length)
let output = Array(doubleBuffer)
print("******** intents \(mm.count) ********")
print(output)
let mn = m.slot_output
let length2 = mn.count
let doublePtr2 = mm.dataPointer.bindMemory(to: Double.self, capacity: length2)
let doubleBuffer2 = UnsafeBufferPointer(start: doublePtr2, count: length2)
let output2 = Array(doubleBuffer2)
print("******** slots \(mn.count) ********")
print(output2)
}
}
当我运行我的代码时,我得到了这个,被截断的意图:
******** intents 540 ********
[0.0028914143331348896, 0.0057610333897173405, 4.1651015635579824e-05, 0.15935245156288147, 5.6665314332349226e-05, 5.7797817134996876e-05, 0.0044302307069301605, 0.00012486864579841495, 0.0004683282459154725, 0.003053907072171569, 3.806956738117151e-05, 0.012112349271774292, 5.861848694621585e-05, 0.0031344725284725428,
我认为,问题在于 ids 位于 pickle 文件中,因此可能位于 atis/atis.train.pkl 中。
我所做的只是训练模型并将其转换为 CoreML,现在我正在尝试使用它,但不确定下一步该做什么。
我有一个文本字段,我输入“伦敦当前天气”,我希望得到类似的内容(这是来自运行 example.py){'intent': 'weather_intent', 'slots': [{'name': 'city', 'value': '伦敦'}]}
这是 coreml 输入/输出
最佳答案
感谢@MatthijsHollemans,我能够弄清楚该怎么做。
在 data_processing.py 中我添加了这些:
with open('atis/wordlist.csv', 'w') as f:
for key in ids2words.keys():
f.write("%s\n"%(ids2words.keys[key]))
with open('atis/wordlist_slots.csv', 'w') as f:
for key in ids2slots.keys():
f.write("%s\n"%(ids2slots[key]))
with open('atis/wordlist_intents.csv', 'w') as f:
for key in ids2intents.keys():
f.write("%s\n"%(ids2intents[key]))
这使我能够使用 wordlist.csv 正确标记。
然后,当我收到响应时,使用 mm.count
是错误的,它应该是 output.count
例如,我可以看到意图。
查找具有最大值的元素,然后在 wordlist_intents.csv(我将其转换为数组,可能应该是字典)中查找以查找可能的意图。
我仍然需要做插槽,但基本思想是相同的。
关键是将python中使用的字典输出到csv文件中,然后导入到项目中。
更新
我意识到,当 mm.count 为 540 时,这是因为它可以在句子中包含 20 个单词,因此它可以返回那么多单词。因此,就我而言,我需要按空格分割单词,然后循环多次,因为我不会得到比单词更多的插槽。
我在 SwiftUI 中执行此操作,因此我还必须创建一个可观察对象,以便我可以使用 EnvironmentObject 来传递术语。
因此,为了正确循环内存中的 double 组,我包含了符合我预期的最新代码。
func predictText(instr:String) {
let model = lstm_nopooling300()
guard let mlMultiArray = try? MLMultiArray(shape:[20,1,1],
dataType:MLMultiArrayDataType.int32) else {
fatalError("Unexpected runtime error. MLMultiArray")
}
let tokens = tokenizeSentences(instr: instr)
let sent = instr.split(separator: " ")
print(instr)
print(tokens)
for (index, element) in tokens.enumerated() {
mlMultiArray[index] = NSNumber(integerLiteral: element)
}
guard let m = try? model.prediction(input: lstm_nopooling300Input.init(main_input: mlMultiArray))
else {
fatalError("Unexpected runtime error. MLMultiArray")
}
let mm = m.intent_output
let length = mm.count
let doublePtr = mm.dataPointer.bindMemory(to: Double.self, capacity: length)
var intents = [String]()
for i in 0...sent.count - 1 {
let doubleBuffer = UnsafeBufferPointer(start: doublePtr + i * 27, count: 27)
let output = Array(doubleBuffer)
let intent = convertVectorToIntent(vector: output)
intents.append(intent)
}
print(intents)
let mn = m.slot_output
let length2 = mn.count
let doublePtr2 = mn.dataPointer.bindMemory(to: Double.self, capacity: length2)
var slots = [String]()
for i in 0...sent.count - 1 {
let doubleBuffer2 = UnsafeBufferPointer(start: doublePtr2 + i * 133, count: 133)
let output2 = Array(doubleBuffer2)
var slot = ""
slot = convertVectorToSlot(vector: output2)
slots.append(slot)
slots.append(sent[i].description)
}
print(slots)
}
关于python - 从 Tensorflow 转换 -> CoreML 3.0 用于插槽/意图检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59024502/
我试图在创建 ML 框架的帮助下构建一个预训练的 core-ml 模型,但是创建的模型不可更新,有没有办法创建一个可以在设备本身上更新的预训练的 core-ml 模型(Core-ML 3 中新引入的功
我正在修改 this tutorial 中的代码我收到了这个错误: Error preparing CoreML model "Resnet50.mlmodel" for code generatio
我在 App Store 上有一个应用程序,我从 Crashlytics 获取了它的错误日志。在我的项目中初始化 CoreML 模型时,用户遇到的最常见错误之一(也是我重现失败的错误)发生了。以下是我
考虑一个 csv 文件,如下所示: number,weigth,length,depth,diameter 1,100,202,314,455 2,1040,2062,3314,4585 3,1200
我想实现一个应用程序,能够识别相机输入的图片。我的意思不是对象的分类,而是从给定的图像集中检测精确的单个图像。因此,如果我有一个包含 500 张照片的相册,那么如果我将相机指向其中一张照片,那么应用程
我尝试将 sklearn normalizer 转换为 coreml 模型,如下所示: normalized = sklearn.preprocessing.Normalizer() coreml_m
我刚刚开始探索 CoreML,想知道是否有一种方法可以使用它来训练二元分类模型。 请提供任何引用资料或示例,因为我是 ML 菜鸟。 最佳答案 Core ML 不提供任何用于构建或训练模型的 API。它
我对 CoreML 有疑问,因为当我希望程序验证图像时出现错误: [coreml] Error Domain=com.apple.CoreML Code=1 "Input image feature
有很多教程如何使用 ML 在图像上打印检测到的顶级对象,例如 let request = VNCoreMLRequest(model: model) { [weak self] request, er
我目前正在创建一个 hello world,以便大致了解 CoreML 和 CreateML 的强大功能。我的目标是使用 Apples data table example在我的 hello worl
我用过这个library建立音频分类模型。然后我将这个模型转换为 CoreML。后来想在这段代码中实现模型https://github.com/robmsmt/kDS2iOS/ 我对此有疑问,因为模型
我正在为我当前的 objc 项目使用 CoreML。通常,.mlmodel 文件会自动生成一个 .h 文件,供我在我的 viewcontroller 中导入模型类。但是如果我在项目中导入一些 swif
我已经使用 coremltools 从 keras 转换模型,将其添加到项目并添加到目标。然后当我在模型类部分的导航器中按下模型时,我得到“模型类尚未生成。”。什么意思? 最佳答案 引用自苹果开发者论
let model = test2() var data = [1.0, 2.0,2.0,2.0,2.0,2.0,2.0] guard let mlMultiArray
我是 Core ML 的新手,但到目前为止玩得很开心。我目前正在学习如何通过在 Playground 上创建模型并验证其结果来训练模型进行面部识别。我保存 .mlmodel 并在我的应用程序中实现它。
我正在与应用程序扩展共享 CoreML 模型。 Xcode 为模型生成快速代码。为了在扩展中使用该代码,我还必须在应用程序扩展中包含相同的模型。有没有办法在应用程序中只包含一次模型,并在应用程序和扩展
我创建了一个图像相似性模型,并使用引用数据图像对其进行了测试。我测试了 turicreate 模型,我得到了引用数据图像的零距离,并且在将这段代码与 coreml 模型一起使用时也得到了同样的结果:
我想使用 CoreML 和 ARKit 检测门、窗等对象类别,我想找到门的测量值(如高度、宽度和面积)。 如何检测对象并在该对象上添加一些叠加形状,以便我可以找到该对象的真实世界位置和测量值? 最佳答
在 SO 和 reddit 上搜索问题后,我不知道如何在 ML 文本分类器上训练多输入、多输出分类器。我可以训练单个输入、单个输出文本分类器,但这不适合我的用例。 如有任何帮助,我们将不胜感激。我知道
我正在使用 CoreML 和 ARKit 进行人脸识别。但我不想用应用程序构建 CoreML 模型。我用 python Turicate 制作了一个 coreML 模型。我希望这个模型放在服务器上,它
我是一名优秀的程序员,十分优秀!