编织和绘制神经网络

时间:2017-05-05 02:28:01

标签: r knitr

我试图绘制一些神经网络输出,但我没有得到任何结果。绘制像plot(iris)这样的普通内容的工作正常,但是neuralnetwork()对象的某些内容似乎没有相同的方式。

我的文件如下:

---
title: "stack"
author: "stack"
date: "today"
output:
  pdf_document: default
  html_document: default
---


```{r}
library(neuralnet)
AND <- c(rep(0,3),1)
binary.data <- data.frame(expand.grid(c(0,1), c(0,1)), AND)
net <- neuralnet(AND~Var1+Var2,  binary.data, hidden=0,err.fct="ce", linear.output=FALSE)
plot(net)
```

我没有输出。同样的文件绘制其他东西就好了。有什么想法吗?

2 个答案:

答案 0 :(得分:9)

此问题has been reported之前已在 rmarkdown 存储库中得到解答。在这里,我只是试图解释它为什么不起作用的技术原因。

从帮助页面?neuralnet::plot.nn

Usage

    ## S3 method for class 'nn'
    plot(x, rep = NULL, x.entry = NULL, x.out = NULL,
        ....


Arguments

  ...

  rep   repetition of the neural network. If rep="best", the repetition
        with the smallest error will be plotted. If not stated all repetitions
        will be plotted, each in a separate window.

从源代码(v1.33):

> neuralnet:::plot.nn
function (x, rep = NULL, x.entry = NULL, x.out = NULL, radius = 0.15, 
    .... 
{
    ....
    if (is.null(rep)) {
        for (i in 1:length(net$weights)) {
            ....
            grDevices::dev.new()
            plot.nn(net, rep = i, 
                    ....
        }
    }

我已使用上面的....省略了irrelvant信息。基本上,如果您未指定repneuralnet:::plot.nn将打开新的图形设备来绘制图表。这将打破 knitr 的图形录制,因为

  1. 它打开了图形设备,但没有要求他们开启录制(通过dev.control(displaylist = 'enable'));
  2. knitr 默认使用自己的设备录制图片;如果用户打开新设备,则无法保证 knitr 可以保存新图表。一般来说,我不鼓励在绘制函数时操纵图形设备。
  3. 我不是 neuralnet 包的作者,但我建议作者放弃dev.new(),或至少使其成为条件,例如

    if (interactive()) grDevices::dev.new()
    

    我想dev.new()调用的意图可能是在新窗口中显示情节,但实际上无法保证用户可以看到窗口。 交互式 R会话的默认图形设备是窗口/屏幕设备(如果可用,例如x11()quartz()),但默认设备很可能具有已被用户或包裹作者更改。

    我建议使用条件interactive(),因为对于非交互式R会话,打开新设备(默认情况下,屏幕外)设备可能没什么意义。

答案 1 :(得分:2)

我认为问题在于,对于课程git branch --all 的对象,nn使用参数plot。如果未定义rep,则所有重复都绘制在单独的窗口中(在RMarkdown之外运行时)。如果rep,则仅生成具有最小错误的图。所以这应该有效:

rep = "best"

请参阅```{r} library(neuralnet) AND <- c(rep(0,3),1) binary.data <- data.frame(expand.grid(c(0,1), c(0,1)), AND) net <- neuralnet(AND~Var1+Var2, binary.data, hidden=0,err.fct="ce", linear.output=FALSE) plot(net, rep = "best") ```