小编Ziq*_*Liu的帖子

在一般的CNN网络中应该使用多少全连接层的想法

我注意到ILSVRC中一些着名的CNN结构,如AlexNet,VGG,ZF网等.它们都使用两个全连接层,其次是输出层.为什么两个?这背后有什么内在的想法吗?

我尝试以这种方式理解它:在完全连接的层之前,我们有一堆卷积层,可能包含各种高级功能.完全连接的层就像是从复杂层中抽象出来的特征列表.但从这个意义上说,一个FC层应该足够了.为什么两个?为什么不是三个或四个或更多?我想这背后的约束可能是计算成本.但是,更多的FC层是否总能提供更好的结果?选择两个可能是什么原因?

machine-learning computer-vision neural-network deep-learning conv-neural-network

4
推荐指数
1
解决办法
2271
查看次数

C++默认实现堆栈和队列

C++入门5日,它说的默认实现stack,并queuedeque.

我想知道为什么他们不使用list?堆栈和队列不支持随机访问,总是在两端操作,因此list应该是实现它们的最直观的方式,并且deque支持随机访问(具有恒定时间)在某种程度上是不必要的.

有谁能解释这个实施背后的原因?

c++ c++11

4
推荐指数
1
解决办法
553
查看次数

python3 pathlib mkdir 权限被拒绝

./test/123 当我尝试在 下创建子目录时,此代码引发异常./test/。检查权限后,我发现./test此代码创建的目录具有d-w----r--,这很奇怪......如果我在终端中 mkdir ,该目录将具有drwxr-xr-x权限。

from pathlib import Path
if __name__ == '__main__':
    p1 = Path('./test')
    p1.mkdir(644, parents=True, exist_ok=True)

    p2 = Path('./test/123')
    p2.mkdir(644, parents=True, exist_ok=True)
Run Code Online (Sandbox Code Playgroud)

  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/pathlib.py", line 1267, in mkdir
    if not exist_ok or not self.is_dir():
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/pathlib.py", line 1358, in is_dir
    return S_ISDIR(self.stat().st_mode)
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/pathlib.py", line 1168, in stat
    return self._accessor.stat(self)
PermissionError: [Errno 13] Permission denied: 'test/123'
Run Code Online (Sandbox Code Playgroud)

filesystems python-3.x

4
推荐指数
1
解决办法
6929
查看次数

C++ 为什么原始指针不会增加 shared_ptr 的引用计数?

shared_ptr使用引用计数以确定何时销毁对象。并请看这段代码:

int main() {
    std::shared_ptr<int> pt = std::make_shared<int>(3);
    int *pt2 = pt.get();
    cout << "reference count " << pt.use_count() << endl;
    pt = 0;
    cout << *pt2;

};
Run Code Online (Sandbox Code Playgroud)

在我将 pt 设置为 0 后,引用计数应该变为 0,并且该对象应该被销毁。但是我仍然可以使用 pt2 来访问它。就我而言,结果是正确的,但我想这只是运气。那么是否意味着如果程序员想做一些愚蠢的事情,引用计数机制仍然无法使其100%安全?

c++ c++11

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

C++ std :: vector <std :: pair <const int,int >>不能插入元素

int main() {
  using kv = std::pair<const int ,int>;

  std::vector<kv> vec;
  kv a{1,1};
  vec.insert(vec.begin(),a);
}
Run Code Online (Sandbox Code Playgroud)

我试图将元素插入到该向量中,但编译器给出了这个错误:

cannot assign to non-static data member 'first' with const-qualified type 'const int'
Run Code Online (Sandbox Code Playgroud)

虽然push_back()会正确编译.为什么?将元素插入到这样的向量中的正确方法是什么?

ADD: 我使用的原因std::pair<const int, int>是我想实现类似的东西std::map,并且不应修改键值对中的键.但我不确定std::pair<const int, int>这样做是否正确.

c++ c++11

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

C ++模板提取布尔参数

我想从模板参数中提取bool值,并在代码的其他地方使用该值。(更具体地说,我希望编译时使用if-else)。

template<bool enable_xx>
struct A {
  void DoSomething() {
    if (enable_xx) {
      // do something 
    } else {
      // do something else
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

我正在使用C ++ 11,但是如果更高版本的C ++请使用此类功能,也请告诉我,谢谢!

c++ templates

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

AWS S3 SDK ListObjectsV2 startafter 和 ContinuationToken 有什么区别?

我正在使用Aws::S3::Model::ListObjectsV2Request列出 AWS s3 中的对象。

(它是 c++ sdk,但我想实现与 Java 相同,所以如果您熟悉 Java AWS S3 sdk,请查看我的问题)

有超过 1000 个对象,因此根据 SDK 1000 条记录限制不能放在一页中。

我发现两个 API 似乎都可以合理地处理这个问题。1.

// pseudo code
list_req
all_res = []
while true {
    res = list_req.request()
    all_res.add(res.get_all_entries())
    if (res.isTruncated()) {
        list_req.set_continuation_token(res.get_continuation_token());
    }
}


Run Code Online (Sandbox Code Playgroud)

2.

// pseudo code
list_req
all_res = []
while true {
    res = list_req.request()
    all_res.add(res.get_all_entries())
    if (res.isTruncated()) {
        list_req.set_start_after(res.get_last_entry());
    }
}
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别?(我的情况是第一种方法会出现异常The continuation token provided is incorrect with address : 52.218.217.49,所以我只能使用第二种方法。)

amazon-s3 amazon-web-services aws-sdk

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

C ++从ifstream读取一块并写入ofstream

我想从一个字节中读取一大块字节,ifstream然后再写入另一个字节中ofstream

这是我的代码:

size_t chunk_size = ...;
std::ifstream ifs(in_file_name);
std::ofstream ofs(out_file_name);

char * buffer = new char[chunk_size];
ifs.read(buffer, chunk_size);
ofs << buffer;
delete[] buffer;
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

根据CPP文件,std::ostream::operator<<接受一个streambuffer *作为参数。我不确定是否可以将char数组视为缓冲区流。

(我可以编译并运行代码,但是我的程序中存在一些问题,我不确定这是否是由此引起的,仍在尝试找出答案...)

c++ c++11

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

python3多进程共享numpy数组(只读)

我不确定这个标题是否适合我的情况:我想分享 numpy array 的原因是它可能是我的情况的潜在解决方案之一,但如果您有其他解决方案也很好。

我的任务:我需要实现一个具有多重处理的迭代算法,而每个进程都需要有一份数据副本(该数据很大,并且是只读的,并且在迭代算法期间不会改变)。

我写了一些伪代码来证明我的想法:

import multiprocessing


def worker_func(data, args):
    # do sth...
    return res

def compute(data, process_num, niter):
    data
    result = []
    args = init()

    for iter in range(niter):
        args_chunk = split_args(args, process_num)
        pool = multiprocessing.Pool()
        for i in range(process_num):
            result.append(pool.apply_async(worker_func,(data, args_chunk[i])))
        pool.close()
        pool.join()
        # aggregate result and update args
        for res in result:
            args = update_args(res.get())

if __name__ == "__main__":
    compute(data, 4, 100)
Run Code Online (Sandbox Code Playgroud)

问题是在每次迭代中,我都必须将数据传递给子进程,这是非常耗时的。

我想出了两种可能的解决方案:

  1. 在进程之间共享数据(它是 ndarray),这就是这个问题的标题。
  2. 保持子进程处于活动状态,例如守护进程或其他进程...并等待调用。通过这样做,我只需要在一开始就传递数据。

那么,有什么方法可以在进程之间共享只读 numpy 数组吗?或者,如果您很好地实现了解决方案 2,它也可以工作。 …

python numpy multiprocessing python-3.x python-multiprocessing

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

如果无法删除共享内存段会发生什么

根据我的观察,如果我在不删除共享内存段的情况下终止我的进程,则该共享内存段将只保留在那里,在 中/dev/shm/xxxx,甚至没有其他进程正在使用它。 这是否意味着内存泄漏?(在我重新启动机器后它会消失)为什么 linux 不提供一种机制来维护共享内存上的引用计数,然后系统可以在没有进程使用它时将其删除。

由于进程可能会崩溃,或者我只是未能捕捉到一些异常......无论如何,当进程异常终止时,我很有可能无法删除该共享内存段。

我的用例:我正在运行几个共享相同内存段进行通信的工作进程。并且没有主节点来协调事情。策略是最后一个退出节点将关闭共享内存段。

顺便说一下,我使用的boost::interprocess是系统级别shm_open而不是系统级别,但我认为它们的行为应该是相同的。

c linux shared-memory multiprocessing

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