小编Cha*_*ois的帖子

Haskell中的神经网络

我正在尝试在Haskell中实现神经网络架构,并在MNIST上使用它.

我正在使用hmatrix线性代数包.我的培训框架是使用pipes包构建的.

问题是,我的代码编译不会崩溃.

但是对于一个,层NaN,小批量大小和学习速率的某些组合产生1e-100计算中的值.经过一些检查,我发现if激活中最终会出现非常小的值(顺序).但是,即使没有发生这种情况,培训仍然无效.它的损失或准确性没有任何改善.

我检查并重新检查了我的代码,我不知道问题的根源是什么.

这是反向传播训练,它计算每一层的增量:

backward lf n (out,tar) das = do
    let ?out = tr (derivate lf (tar, out)) -- dE/dy
        deltas = scanr (\(l, a') ? -> let w = weights l in (tr a') * (w <> ?)) ?out (zip (tail $ toList n) das)
    return (deltas)
Run Code Online (Sandbox Code Playgroud)

n为损耗函数,weight是网络(bias矩阵和out向量的每个层),tar并且target是网络和所述的实际输出das(期望的)输出,并且out各自层的激活衍生物.在批处理模式中tar,das …

algorithm haskell neural-network hmatrix

108
推荐指数
1
解决办法
3484
查看次数

在公共 lisp 中加载文件

我一直在学习/玩普通 lisp 一段时间(几个月),但我仍然很难理解如何从其他文件导入代码。我正在使用 emacs/slime 和 SBCL,从我读过的内容来看,我需要使用“加载”函数从另一个文件加载代码。我还定义了包并将我想要导入的包的名称放在“:use”子句中。但是,slime 一直抱怨我尝试加载的文件不存在(当它显然存在时)。我究竟做错了什么?例子:

(load "file.lisp")
(defpackage :package
  (:use :cl :file))
...
Run Code Online (Sandbox Code Playgroud)

谢谢。

lisp import load sbcl common-lisp

6
推荐指数
1
解决办法
7711
查看次数

Common Lisp中的类别类

我想知道是否有一种方法可以typeclasses在Common Lisp中模拟Haskell .

通用函数允许overloading,并且可以使用deftype(例如,可以通过某些实例列表的成员资格来定义)来定义类型.

但我不能dispatch上一个类型.有没有办法在类定义之后使cons类成为其他类的子类(和子类型)(例如,使类成为类的子sequence类,而不重新定义cons)?

谢谢.

haskell common-lisp typeclass

6
推荐指数
1
解决办法
552
查看次数

常见的lisp中的本地动态绑定

诚实地说,我不确定我是否完全理解"动态"与"词汇"的约束意味着什么.但据我所知,当我使用defvardefparameter定义绑定时,1.它声明了一个全局变量2.绑定被声明为"特殊",因此它可以被新的本地绑定所遮蔽,例如

(defvar *x* 3)
(defun f () *x*)
(f) ;=>3
(let ((*x* 2)) (f));=>2
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,是否有可能具有相同属性的局部绑定(即不污染全局环境的绑定)(即可以被"外部"/"更新"绑定遮蔽)?

例:

(special-binding ((x 1)) (defun f () x))
(f);=>1
x;=>error, no binding in the global environment
(let ((x 2)) (f));=>2
Run Code Online (Sandbox Code Playgroud)

我尝试(special x)let块中使用声明,或者(locally (declare (special x)) ...),但它似乎没有创建闭包(要求从定义的函数中的变量值触发"未绑定变量"错误).

closures common-lisp dynamic-binding

3
推荐指数
1
解决办法
293
查看次数

在韦兰选择

我试图了解选择(即 X 中的主要和剪贴板)在 Wayland 中是如何工作的。我读过一些,我知道 Xorg 有很多(三个)缓冲区用于管理选择和复制/粘贴或“拖放”操作,而 Wayland 只有一个。

在X,我可以用各种程序访问这些缓冲区(xclipxsel,等),这是非常有用的。例如,我有一个快捷方式,可以将我选择的文本发送到一个程序(使用xsel -p -o),然后该程序对该选择进行处理。

据我了解,Wayland 没有包含任何选定文本的“主要”缓冲区,而只有一个“剪贴板”缓冲区,其中仅包含显式复制的文本(例如使用快捷方式)。这一切都很好,但这肯定不会阻止xselWayland中存在等价物吗?我仍然可以设置一个快捷方式来同时复制选择并将其发送到另一个程序吗?那怎么办?

clipboard selection xorg wayland

3
推荐指数
1
解决办法
1953
查看次数

使用ssl证书和带有卷的密钥部署postgresql docker

我正在尝试部署一个postgresql容器。我正在尝试使用卷将ssl证书和密钥放入容器中,但是我无法获得正确的权限。文件需要容器的postgres用户可读,但也具有有限的权限(600)。

是否可以使用卷,还是为此必须覆盖Dockerfile?

谢谢。

postgresql permissions ssl docker

3
推荐指数
2
解决办法
1380
查看次数

使用 atexit 终止线程时脚本卡在退出时

我正在玩 python 3.7.4 上的线程,我想用它atexit来注册一个将(干净地)终止线程的清理函数。

例如:

# example.py
import threading
import queue
import atexit
import sys

Terminate = object()

class Worker(threading.Thread):
    def __init__(self):
        super().__init__()
        self.queue = queue.Queue()

    def send_message(self, m):
        self.queue.put_nowait(m)

    def run(self):
        while True:
            m = self.queue.get()
            if m is Terminate:
                break
            else:
                print("Received message: ", m)


def shutdown_threads(threads):
    for t in threads:
        print(f"Terminating thread {t}")
        t.send_message(Terminate)
    for t in threads:
        print(f"Joining on thread {t}")
        t.join()
    else:
        print("All threads terminated")

if __name__ == "__main__":
    threads = [
        Worker() …
Run Code Online (Sandbox Code Playgroud)

python locking atexit python-multithreading python-3.x

2
推荐指数
1
解决办法
2015
查看次数