js人工智能,js人工智能库 Natural
大家好,今天小编关注到一个比较有意思的话题,就是关于js人工智能的问题,于是小编就整理了2个相关介绍js人工智能的解答,让我们一起看看吧。
人工智能中的eval是什么?
这题目的看起来比较简单,但是总感觉有没有那么简单,确实是这样子。所以回答这个题目要从不同的角度去回答。首先回答清楚它是干什么的有什么用,然后在谈谈它对作用域的影响,然后就是执行效率的问题,最后谈谈eval()的其它作用。这样答下来自己都觉得满意了吧!
eval()的作用
把字符串参数解析成JS代码并运行,并返回执行的结果;
例如:
eval("2+3");//执行加运算,并返回运算值。
eval("varage=10");//声明一个age变量
eval的作用域
functiona(){
eval("var x=1"); //等效于 var x=1;
console.log(x); //输出1
}
a();
console.log(x);//错误 x没有定义
说明作用域在它所有的范围内容有效
如何使用JavaScript构建一个神经网络?
首先,我必须承认我不是神经网络或机器学习方面的专家。坦率的说,我仍然对大部分内容感到困惑。但希望这能够鼓励到正在读这篇文章,并急切想尝试 M.L 的非专家们。
机器学习会时不时地出现,我会告诉自己「是的,这很酷……但是我不确定我是否想在接下来几个月的时间里学习线性代数和微积分。」
然而,像很多的开发人员一样,我对 JavaScript 很感兴趣,偶尔也会寻找在 JS 中实现机器学习的例子,结果却发现大量的文章和 StackOverflow 的帖子都在告诉我们对于 M.L. 来说 JS 是多么糟糕的语言,诚然,这是事实。然后我就分心了,继续,认为他们是对的,我应该回去验证表格输入并等待 CSS 网格的启动。
但是后来我发现了 Brain.js,这让我大吃一惊。它在哪里被藏起来了?!文档写的非常好且易于遵循,在开始大约 30 分钟之内,我就建立并训练了一个神经网络。事实上,如果你想直接跳过整篇文章,仅仅在 Github 上阅读 readme (https://github.com/BrainJS/brain.js),请便。它真的很棒。
也就是说,接下来的内容不是关于深入研究神经网络的隐藏输入层、激活函数或如何使用 Tensorflow 的教程。相反,这是一个简单的、入门级别的关于如何实现 Brain.js 的解释,这有点超出了文档的范围。
OK, 让我们做点什么......
以下是我们将要做的事情的概述:
1. 创建你的起始文件
2. 决定你想要你的神经网络做什么
3. 建立 Brain.js 并了解如何处理训练数据和用户输入
4. 收集一些训练数据
5. 运行神经网络
6. 利润?
如果你希望直接下载此项目的工作版本,而不是按照文章进行操作,那么你可以在这里 (https://github.com/lordpoint/neural-network-author-classifier) 克隆 Github 存储库。
1 - 起始文件
创建一个新目录并在其中放置一个好的 ol』 *index.html *样板文件。然后创建三个 JS 文件:*brain.js、 training-data.js *和* scripts.js*(或用于默认 JS 文件的任何通用项),当然,将所有这些文件导入到 index.html 的底部文件中。
永远不要害怕看到文件结构
到目前为止都很容易。
现在,在这里 (https://raw.githubusercontent.com/harthur-org/brain.js/master/browser.js) 获取 Brain.js 的源代码。将**全部内容**复制并粘贴到空的 *Brain.js* 文件中,点击 save 和 bam:完成 4 个文件中的 2 个。
2 -「我的目的是什么?」
接下来是有趣的部分:决定你的机器学什么。用这样的东西可以解决无数的实际问题,例如,情感分析或图像分类等。我碰巧认为将文本作为输入的 M.L. 的应用程序非常有趣,因为你几乎可以在任何地方找到训练数据,并且他们有各种各样的潜在用例,所以我们将在这里使用的例子是一个处理文本分类的例子:
我们将确定一个推特是由 Donald Trump 还是 Kim Kardashian 写的。
Ok,这可能不是最有用的应用程序。但是 Twitter 是机器学习素材的宝库,尽管它可能是无用的,但我们的推特作者识别器仍然会说明一个强大的观点。一旦它被训练完成,我们的神经网络将可以在看到**它从未看过的**推特后确定它是由 Donald Trump 还是 Kim Kardashian 所写的,仅仅通过识别他们所写东西中的模式。为了做到这一点,我们将需要提供尽可能多的训练数据,以便将其复制/粘贴到我们的 *training-data.js *文件中,然后我们可以看看我们是否能找到一些推特的作者。
3 - 建立和数据处理
现在剩下要做的就是在我们的 *scripts.js *文件中建立 Brain.js,并提供一些在 *training-data.js *文件中的训练数据。但是在此之前,让我们从 30,000 英尺的角度来看一下这些将如何工作。
建立 Brain.js 非常简单,所以我们不会花费太多时间,但是有一些关于如何预测其输入数据被格式化的细节,我们应该先来看一下。我们先看一下文档汇中包含的建立示例(我在此略微做过修改),这些示例很好地说明了这一点:
let net = new brain.NeuralNetwork();
net.train([
{
Input: { r: 0.03, g: 0.7, b: 0.5 },
Output: { black: 1 }
},{
Input: { r: 0.16, g: 0.09, b: 0.2 },
Output: { black: 1 }
},{
Input: { r: 0.5, b: 0.5 },
Output: { black: 1 }
}
]);
let output = net.run({ r: 1, g: 0.4, b: 0 });
首先,上面的例子实际上是一个工作 A.I(它看着给定的颜色,然后告诉你黑色文本还是白色文本在上面更清晰)。这有希望说明 Brain.js 是多么容易使用。只是实例化、训练、然后运行而已。我的意思是,如果你将训练数据内联,将会是 3 行代码。很酷。
现在让我们来谈一下训练数据。在上面的例子中,除了训练数据整体 input: {}, output: {} 的格式,还有两个重要的事情需要注意。
首先,数据不需要长度相同。正如你在上面第 11 行看到的,只有一个 R 和 B 值通过,而另外两个输入通过了 R、G 和 B 的值。另外,值得一提的是,即使上面的例子将输入看作对象,你也可以使用数组。我提到这点很大程度上是因为我们将在项目中传递不同长度的数组。
第二,这些不是有效的 RGB 值。如果你想真的使用它们,每个都会变成黑色。这是因为输入值必须介于 0 和 1 之间才能使 Brain.js 和它们一起工作。因此,在上面的例子中,每种颜色都必须经过处理(可能只是经过一个将其除以 255 的函数进行处理——RGB 的最大值)以使其工作。我们也会做同样的事情。
3.1—encode()
所以如果我们想让神经网络接受推特(即字符串)为输入,我们需要通过一个类似的函数(下面称为 encode())来处理它们,这将使字符串中的每一个字符变成一个介于 0 和 1 之间的值,并将其储存在一个数组中。幸运的是,Javascript 有一个将字符转化成 ASCII 的简单方法,叫做 charCodeAt()。所以我们将使用它并将输出除以 扩展的 ASCII (http://www.theasciicode.com.ar/) 码的最大值:255(我们用**扩展的**ASCII
码,以防遇到像**é **或 **½ **这样的边缘情况),这将确保我们得到的值 <1。
3.2—processTrainingData()
另外,我们会将训练数据存储为纯文本,而不是我们最终将输入到人工智能的编码数据——稍后你将会为此感谢我。所以我们需要另一个函数(下面称为 processTrainingData())将前面提到的编码函数应用到训练数据中,有选择地将文本转换为编码字符,并返回一组训练数据,这些数据将与 Brain.js 很好的工作。
So here』s what all of that code will look like (this goes into your 『scripts.js』 file):
所以下面是所有的代码(这会进入你的 『scripts.js』 文件中):
let trainedNet;
function encode(arg) {
return arg.split('').map(x => (x.charCodeAt(0) / 255));
}
function processTrainingData(data) {
return data.map(d => {
return {
input: encode(d.input),
output: d.output
}
})
}
function train(data) {
let net = new brain.NeuralNetwork();
net.train(processTrainingData(data));
trainedNet = net.toFunction();
console.log('Finished training...');
};
function execute(input) {
let results = trainedNet(encode(input));
let output;
results.trump > results.kardashian ? output = 'Trump' : output = 'Kardashian';
return output;
}
train(trainingData);
31 行。这是非常多的。
在这里你会注意到在 train() 函数中的第 20 行有前面文档的示例中没有提到的(除了我们已经讨论过的两个辅助函数外),它将训练过的神经网络保存到一个叫 trainedNet 的全局变量中。这可以防止我们每次使用神经网络时不得不重新训练它们。一旦网络被训练并保存到变量中,我们可以将它称为函数,并传入编码输入(如 execute() 函数中的第 25 行)以使用 A.I。
好的,所以现在你的 *index.html*、*brain.js*、和 *scripts.js *文件都完成了。现在我们需要的是将一些东西放入 training-data.js 中,准备好开始吧。
4 - 训练
最后,我们的训练数据。像我之前提到的,我们将所有推特存储为文本,并将它们编码为数值,这将使你在实际需要复制/粘贴训练数据时变得更加容易。没有必要的格式。只需要在文本中粘贴并添加一个新行。
const trainingData = [
{
input: "Inside Chi's nursery",
output: { kardashian: 1 }
},{
input: "Why I dyed my hair pink",
output: { kardashian: 1 }
},{
input: "Feeling Blue (wearing @kkwbeauty powder contour in medium & dark contour kit as eye shadow, & a new lip coming soon)",
output: { kardashian: 1 }
},{
input: "I will be interviewed by @JudgeJeanine on @FoxNews at 9:00 P.M. Enjoy!",
output: { trump: 1 }
},{
input: "Dem Memo: FBI did not disclose who the clients were - the Clinton Campaign and the DNC. Wow!",
output: { trump: 1 }
},{
input: "Thank you to the great men and women of the United States @SecretService for a job well done!",
output: { trump: 1 }
}
]
把它添加到你的 『training-data.js』 文件中,你就完成了!
注意:虽然上面的例子只显示了每个人的 3 个样本,但我用了 10 个;我只是不希望这个样本占用太多空间。当然,你的神经网络的准确性会随着你提供的训练数据量的增加而成比例的增加,所以你可以随意使用比我更多或更少的数据,看看它是如何影响结果的。
5 - 执行
现在,运行新训练的神经网络只需要在 『script.js』 文件的底部额外添加一行调用 execute() 函数的指令,并传入一个 Trump 或 Kardashian 的推特。确保 console.log,因为我们还没有建立 UI。下面是一个来自 Kim Kardashian 的推特,它不在我的训练数据中(即网络之前没有见过这篇推特):
然后在本地主机上拉起 index.html 页面,检查 console,然后......
在这里!该网络正确识别了它之前从未见过的来自 Kim Kardashian 的推特,确定性为 86%。
现在让我们用 Trump 的推特再尝试一下:
console.log(execute("Whether we are Republican or Democrat, we must now focus on strengthening Background Checks!"));
结果是......
再一次,一个从未见过的推特。再一次,正确识别!这次有 97% 的确定性。
6 - 利润?
现在你有一个神经网络可以训练你想要的任何文本!你可以轻松地调整它来识别电子邮件或公司在线评论中的情绪,识别垃圾邮件,分类博客文章,确定信息是否紧急,或任何上千种不同的应用程序。尽管我们的推特识别器是无用的,但是它仍然说明了一个非常有趣的观点:像这样的神经网络可以执行类似根据写作方式识别作者这样的细致入微的任务。
所以,即使你不去创建一个以机器学习为动力的创新或有用的工具,这仍然是你开发工具中很好的经验。你永远不知道什么时候可能就派上用场了,甚至可能在未来开辟新的机会。
到此,以上就是小编对于js人工智能的问题就介绍到这了,希望介绍关于js人工智能的2点解答对大家有用。