我感到困惑之间的差异apply_gradients
,并minimize
在tensorflow优化的.例如,
optimizer = tf.train.AdamOptimizer(1e-3)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
Run Code Online (Sandbox Code Playgroud)
和
optimizer = tf.train.AdamOptimizer(1e-3)
train_op = optimizer.minimize(cnn.loss, global_step=global_step)
Run Code Online (Sandbox Code Playgroud)
他们确实一样吗?
如果我想降低学习率,我可以使用以下代码吗?
global_step = tf.Variable(0, name="global_step", trainable=False)
starter_learning_rate = 1e-3
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,
100, FLAGS.decay_rate, staircase=True)
# Passing global_step to minimize() will increment it at each step.
learning_step = (
optimizer = tf.train.AdamOptimizer(learning_rate)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我已经在我的系统上安装了pyenv,命令运行pyenv install --list
良好.但是当我使用下载一些Python版本时pyenv install 2.7.11
,结果如下:
Downloading Python-2.7.11.tgz...
-> https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
error: failed to download Python-2.7.11.tar.gz
BUILD FAILED (Ubuntu 15.04 using python-build 20160509)
Run Code Online (Sandbox Code Playgroud)
我没有在官方的Common build问题上发现任何类似的问题.
是pyenv
不是没有赶上新的Ubuntu更新?
似乎COCO PythonAPI只支持 python2。但是人们确实在 python3 环境中使用它。
我尝试了可能的安装方法,例如
python3 setup.py build_ext --inplace
python3 setup.py install
Run Code Online (Sandbox Code Playgroud)
但python3 setup.py install
会因失败coco.py
而cocoeval.py
containning python2打印功能。
更新:通过更新COCO PythonAPI项目解决。把这个问题留给面临同样问题的人。
该文件中scipy.misc.imresize
指出,imresize
已被弃用!使用skimage.transform.resize
代替。但似乎与skimage.transform.resize
给出不同的结果scipy.misc.imresize
。
例如,对于1.jpg:
import numpy as np
from skimage.transform import resize
from scipy.misc import imresize
from imageio import imread
img = imread('1.jpg')
res = (1280, 1280)
img1 = resize(img, res) # np.float64, skimage
img2 = imresize(img, res) # np.uint8, scipy.misc
img3 = (img1 * 255).astype(np.uint8)
# from skimage import img_as_ubyte
# img3 = img_as_ubyte(img1)
np.count_nonzero(img3 - img2)
1748642
Run Code Online (Sandbox Code Playgroud)
容易发现它们img2
并且img3
明显不同,但是当使用imageio.save
它们时,它们看起来相同。
我理解正常的lambda表达式,例如
g = lambda x: x**2
Run Code Online (Sandbox Code Playgroud)
然而,对于一些复杂的,我对它们有点困惑.例如:
for split in ['train', 'test']:
sets = (lambda split=split: newspaper(split, newspaper_devkit_path))
def get_imdb():
return sets()
Run Code Online (Sandbox Code Playgroud)
newspaper
功能在哪里.我想知道它到底是什么sets
以及为什么get_imdb
函数可以返回值sets()
谢谢你的帮助!
补充:代码实际上来自这里factory.py
我知道mat文件的版本问题,它们对应于python中的不同加载模块,即scipy.io
和h5py
。我还搜索了很多类似的问题,例如scipy.io.loadmat 嵌套结构(即字典)和How to keep Matlab struct while accessing in python? 。但当涉及到更复杂的 mat 文件时,它们都会失败。我的anno_bbox.mat
文件结构如下所示:
前两级:
尺寸方面:
在海:
在海 bbox human 中:
当我使用时spio.loadmat('anno_bbox.mat', struct_as_record=False, squeeze_me=True)
,它只能获取作为字典的第一级信息。
>>> anno_bbox.keys()
dict_keys(['__header__', '__version__', '__globals__', 'bbox_test',
'bbox_train', 'list_action'])
>>> bbox_test = anno_bbox['bbox_test']
>>> bbox_test.keys()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'keys'
>>> bbox_test
array([<scipy.io.matlab.mio5_params.mat_struct object at 0x7fa8660ab128>,
<scipy.io.matlab.mio5_params.mat_struct object at 0x7fa8660ab2b0>,
<scipy.io.matlab.mio5_params.mat_struct object at 0x7fa8660ab710>, …
Run Code Online (Sandbox Code Playgroud) 我正在使用多光谱相机来收集数据.一个是近红外线,另一个是彩色的.不是两个摄像头,而是一个摄像头可以同时获得两种不同的图像.我可以使用一些API函数,如J_Image_OpenStream.核心代码的两部分如下所示.一个用于打开两个流(实际上它们在一个样本中,我必须使用它们,但我的意思并不太清楚)并设置两个avi文件的保存路径并开始采集.
// Open stream
retval0 = J_Image_OpenStream(m_hCam[0], 0, reinterpret_cast<J_IMG_CALLBACK_OBJECT>(this), reinterpret_cast<J_IMG_CALLBACK_FUNCTION>(&COpenCVSample1Dlg::StreamCBFunc0), &m_hThread[0], (ViewSize0.cx*ViewSize0.cy*bpp0)/8);
if (retval0 != J_ST_SUCCESS) {
AfxMessageBox(CString("Could not open stream0!"), MB_OK | MB_ICONEXCLAMATION);
return;
}
TRACE("Opening stream0 succeeded\n");
retval1 = J_Image_OpenStream(m_hCam[1], 0, reinterpret_cast<J_IMG_CALLBACK_OBJECT>(this), reinterpret_cast<J_IMG_CALLBACK_FUNCTION>(&COpenCVSample1Dlg::StreamCBFunc1), &m_hThread[1], (ViewSize1.cx*ViewSize1.cy*bpp1)/8);
if (retval1 != J_ST_SUCCESS) {
AfxMessageBox(CString("Could not open stream1!"), MB_OK | MB_ICONEXCLAMATION);
return;
}
TRACE("Opening stream1 succeeded\n");
const char *filename0 = "C:\\Users\\shenyang\\Desktop\\test0.avi";
const char *filename1 = "C:\\Users\\shenyang\\Desktop\\test1.avi";
int fps = 10; //frame per second
int codec = -1;//choose the compression method
writer0 = …
Run Code Online (Sandbox Code Playgroud) 我想将基于原始队列的数据加载机制更改为tf.data
API。
原始代码是:
# Index queue
self.input_idxs = tf.placeholder(tf.int64, shape=[None, 2])
idx_queue = tf.FIFOQueue(1e8, tf.int64)
self.enq_idxs = idx_queue.enqueue_many(self.input_idxs)
get_idx = idx_queue.dequeue()
# Image loading queue
img_queue = tf.FIFOQueue(opt.max_queue_size, task.proc_arg_dtype)
load_data = tf.py_func(task.load_sample_data, [get_idx], task.proc_arg_dtype)
enq_img = img_queue.enqueue(load_data)
init_sample = img_queue.dequeue()
# Preprocessing queue
# (for any preprocessing that can be done with TF operations)
data_queue = tf.FIFOQueue(opt.max_queue_size, task.data_arg_dtype,
shapes=task.data_shape)
enq_data = data_queue.enqueue(task.preprocess(init_sample, train_flag))
self.get_sample = data_queue.dequeue_many(opt.batchsize)
Run Code Online (Sandbox Code Playgroud)
更改后为:
# Dataset
self.input_idxs = tf.placeholder(tf.int64, shape=[None, 2])
dataset = tf.data.Dataset.from_tensor_slices(self.input_idxs)
def load_sample(idx): …
Run Code Online (Sandbox Code Playgroud)