小编Nim*_*z14的帖子

Tensorflow:关于adam优化器的困惑

关于adam优化器如何在tensorflow中实际工作,我感到很困惑.

我阅读文档的方式是,每次梯度下降迭代都会改变学习速度.

但是当我调用该函数时,我给它一个学习率.我并没有把这个函数称为,做一个时代(隐式地调用#iterations以便进行我的数据训练).我明确地调用每个批次的函数

for epoch in epochs
     for batch in data
          sess.run(train_adam_step, feed_dict={eta:1e-3})
Run Code Online (Sandbox Code Playgroud)

所以我的eta无法改变.而且我没有传入时间变量.或者这是某种生成器类型的东西,t每当我调用优化器时,会话创建会增加吗?

假设它是一些生成器类型的东西,并且学习率正在无形地降低:如何在不降低学习速率的情况下运行adam优化器?在我看来,像RMSProp基本上是相同的,我必须做的唯一的事情,以使其等于(学习率无视)是改变超参数momentumdecay匹配beta1,并beta2分别.那是对的吗?

python tensorflow

15
推荐指数
1
解决办法
9968
查看次数

Tensorflow:使用tf.slice分割输入

我正在尝试将输入图层拆分为不同大小的部分.我正在尝试使用tf.slice这样做,但它不起作用.

一些示例代码:

import tensorflow as tf
import numpy as np

ph = tf.placeholder(shape=[None,3], dtype=tf.int32)

x = tf.slice(ph, [0, 0], [3, 2])

input_ = np.array([[1,2,3],
                   [3,4,5],
                   [5,6,7]])

with tf.Session() as sess:
        sess.run(tf.initialize_all_variables())
        print sess.run(x, feed_dict={ph: input_})
Run Code Online (Sandbox Code Playgroud)

输出:

[[1 2]
 [3 4]
 [5 6]]
Run Code Online (Sandbox Code Playgroud)

这是有效的,大致是我想要发生的,但我必须指定第一个维度(3在这种情况下).我不知道,虽然多少矢量我会输入,这就是为什么我使用的是placeholderNone摆在首位!

是否有可能以slice这样一种方式使用它,直到运行时尺寸未知?

我尝试过使用placeholder它的价值,ph.get_shape()[0]如下所示:x = tf.slice(ph, [0, 0], [num_input, 2]).但那也不起作用.

python tensorflow

10
推荐指数
2
解决办法
2万
查看次数

根据批量大小动态平铺张量

我有一个1D张量,我想堆叠/打包/平铺成2D张量y=[a, a, a].如果我知道我想重复多少次,我可以tf.tile一起使用reshape.

但我不这样做,因为尺寸取决于批量大小.占位符值None不是有效输入.我知道tf.slice一个人可以输入-1并让tensorflow弄明白,但我不知道tensorflow如何推断出正确的大小.我确实有一个x形状相同的张量y,但我没有看到一个tile_like函数.

有什么建议?

python tensorflow

9
推荐指数
1
解决办法
4826
查看次数

如何获取Android中Room数据库的行数?

我遵循的做法是拥有一个存储库和一个Dao等。我试图通过具有一个函数来获取数据库存储库中的行数

int getNumFiles() {
    List<AFile> lst = files.getValue();  // files is of type LiveData<List<AFile>> files;
    if (lst == null) {
        return 0;
    } else {
        return lst.size();
    }
}
Run Code Online (Sandbox Code Playgroud)

lst总会评估为null。我想这与不允许我从UI线程查询数据库有关吗?我是否应该像添加或删除元素一样实现它?换句话说,在Dao中是否具有通过数据库存储库中的AsyncTask调用的函数?我对如何做这个非常简单的事情感到困惑。

这样的回答显示了一个将在道写找出哪些行数,但它并不能解释的仓库应该怎么称呼这一点。

android android-room

8
推荐指数
4
解决办法
8982
查看次数

Tensorflow:如何将NaN转换为数字?

我正在尝试在训练我的图形时计算权重的熵并将其用于正则化.这当然涉及到w*tf.log(w),并且随着我的权重的变化,其中一些必然会进入导致NaN返回的区域.

理想情况下,我会在图表设置中包含一行:

w[tf.is_nan(w)] = <number>
Run Code Online (Sandbox Code Playgroud)

但tensorflow不支持这样的分配.我当然可以创建一个操作,但这不起作用,因为我需要在执行整个图形时发生它.我不能等待图表执行然后"修复"我的权重,必须是图执行的一部分.

我无法np.nan_to_num在文档中找到相应的内容.

有人有想法吗?

(由于显而易见的原因,添加epsilon不起作用)

python nan tensorflow

7
推荐指数
1
解决办法
6580
查看次数

使用多处理的程序大部分时间都花在线程锁上?

我正在使用multiprocessing.Pool并行化我正在运行的程序的某些部分。我正在循环数据,计算一些内容,然后返回结果。

性能不佳的代码:

def likelihood_data(self, data):
    func = partial(likelihood, means=self.means, stddevs=self.stddevs, c_ks=self.c_k)
    if len(data) > 100:
        pool = Pool(10)
        try:
            likelihoods = pool.map(func, data)
        finally:
            pool.close()
            pool.join()
    else:
        likelihoods = []
        for sample in data:
            likelihoods.append(self.likelihood(sample))
    return np.mean(likelihoods)

def likelihood(sample, means, stddevs, c_ks):  # is outside of class
    likel = [] 
    for c_k, m, s in zip(c_ks, means, stddevs):
        likel.append(likel_bound(np.log(c_k) + np.sum(logg(sample, m, s))))
    return np.sum(np.exp(likel))   
Run Code Online (Sandbox Code Playgroud)

从使用 cProfile 来看,性能不佳是因为大部分时间都花在了{method 'acquire' of '_thread.lock' objects}. 我不明白为什么当每个进程彼此独立时会发生这种情况。这里发生了什么?

编辑:或者它只是花费了最长的时间,因为它正在等待所有进程完成?

python python-multiprocessing

7
推荐指数
1
解决办法
3189
查看次数

pybind11 从 C++ 修改 numpy 数组

编辑:它现在有效,我不知道为什么。不要以为我改变了什么

我想用pybind11传入并修改一个大的numpy数组。因为它很大,我想避免复制它并返回一个新的。

这是代码:

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/numpy.h>
#include <vector>

// C++ code
void calc_sum_cost(float* ptr, int N, int M, float* ptr_cost) {
  for(int32_t i = 1; i < N; i++) {
    for(int32_t j = 1; j < M; j++) {
      float upc = ptr[(i-1) * M + j];
      float leftc = ptr[i * M + j - 1];
      float diagc = ptr[(i-1) * M + j - 1];
      float transition_cost = std::min(upc, std::min(leftc, diagc));
      if (transition_cost == diagc) …
Run Code Online (Sandbox Code Playgroud)

python pybind11

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

Cython,关于向量(大小)构造函数的混淆

编辑:仅供参考,现在遇到此问题的任何人只需使用 pybind11,不要在此(cython 内容)上浪费时间

似乎定义vector变量的唯一方法是

cdef std::vector[int]* vec=new vector[int](<size>)

我的想法正确吗?这是示例代码,如果我编译并运行此 Python 最终会崩溃(VS2015,Python 3.5)。

from libcpp.vector cimport vector
def test():
    cdef vector[int]* vec = new vector[int](5)
    cdef int i
    for i in range(5):
        print(vec[i])

    del vec
Run Code Online (Sandbox Code Playgroud)

我想要一个具有一定大小的二维向量。我该怎么做?可不可能是:

cdef std::vector[std::vector[int]]* vec=new vector[vector[int](<size1>)](<size2>)

c++ python cython

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

TensorFlow:我如何总结tf.Variables列表?

我有一个tf.Variable类型的3D数组.tf.reduce_sum仅适用于个人张量.我试过做:

tf.reduce_sum([tf.reduce_sum(mat) for mat in var_3Dlist])
Run Code Online (Sandbox Code Playgroud)

...但是tf.reduce_sum()期望张量而不是列表.我能以某种方式将其转换为张量,还是有另一种更好的方法呢?我没有在API中找到任何内容.

python tensorflow

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

没有运算符"="匹配这些操作数

所以这一定是非常愚蠢的事情,但是这个代码我得到了一个错误.

可能出现的问题,操作数<,>也不起作用.一个人使用不同的向量吗?当我尝试y.at(1)= 10; 它说表达式必须有类型......?

#include "stdafx.h"
#include <iostream>
#include "time.h"
#include <vector>


int main()
{
    using namespace std;
    const long long l = 100000;

    vector <int> y[l];
    long long x[l];

    y[0] = 10; // Test statement results in Error.

//for (long i = 0;i < l;i++) {
    //  y.at(i) = i;//rand() % 100;
    //  x[i] = rand() % 100;
    //}



    clock_t t = clock();

    for (long long i = 0;i < l;i++) {
        long long r;
        r = y[i] ^ …
Run Code Online (Sandbox Code Playgroud)

c++ arrays vector

0
推荐指数
1
解决办法
4882
查看次数

sizeof(long long)给出8但是数字溢出2**32

long long n, prod, i;
n = 13;
prod = 1;

for (i = 1 ; i <= n ; i++) {
    prod *= i;
}
printf("%d\n", prod);
printf("%d\n", sizeof(long long));
Run Code Online (Sandbox Code Playgroud)

回报

$ 1932053504
$ 8
Run Code Online (Sandbox Code Playgroud)

结果显然是溢出的.但我不明白为什么会发生这种情况long long.sizeof(int)返回4 [字节],但产品是相同的.我究竟做错了什么?

c overflow long-integer

-1
推荐指数
1
解决办法
66
查看次数