我想在Keras中实现我的自定义指标.根据该文件,我的自定义指标应被定义为需要作为输入的两个张量,函数y_pred和y_true,并返回一个值张.
但是,我对这些张量中确切包含的内容y_pred以及y_true优化运行时的内容感到困惑.它只是一个数据点吗?这是整批吗?整个时代(可能不是)?有没有办法获得这些张量的形状?
有人可以指向一个值得信赖的地方,我可以获得这些信息吗?任何帮助,将不胜感激.不确定是否相关,但我正在使用TensorFlow后端.
到目前为止我尝试过的事情,为了回答这个问题:
y_true并且y_pred有整个批次的标签,但我不确定).y_true,并y_pred在优化过程中,通过定义这样的指标: def test_metric(y_true, y_pred):
y_true = K.print_tensor(y_true)
y_pred = K.print_tensor(y_pred)
return y_true - y_pred
Run Code Online (Sandbox Code Playgroud)
(遗憾的是,这些在优化过程中不会打印任何内容).
假设我有以下Python代码:
def example_function(numbers, n_iters):
sum_all = 0
for number in numbers:
for _ in range(n_iters):
number = halve(number)
sum_all += number
return sum_all
ns = [1, 3, 12]
print(example_function(ns, 3))
Run Code Online (Sandbox Code Playgroud)
example_function这里只是遍历ns列表中的每个元素,并将它们减半3次,同时累积结果。运行此脚本的输出很简单:
2.0
Run Code Online (Sandbox Code Playgroud)
由于1 /(2 ^ 3)*(1 + 3 + 12)= 2。
现在,让我们说(出于任何原因,也许是调试或日志记录),我想显示一些有关所采取的中间步骤的信息example_function。也许然后我会将此函数重写为如下所示:
def example_function(numbers, n_iters):
sum_all = 0
for number in numbers:
print('Processing number', number)
for i_iter in range(n_iters):
number = number/2
print(number)
sum_all += number
print('sum_all:', sum_all)
return sum_all
Run Code Online (Sandbox Code Playgroud)
现在,当使用与以前相同的参数调用它时,将输出以下内容:
Processing number 1 …Run Code Online (Sandbox Code Playgroud) 我想vector<string通过使用其范围构造函数将文本文件中的所有行加载到a中,然后通过cout以下方式输出:
#include<iostream>
#include<fstream>
#include<vector>
#include<iterator>
using namespace std;
int main()
{
ifstream file("file.txt");
vector<string> strings(istream_iterator<string>(file) , istream_iterator<string>());
for(auto s : strings)
cout << s << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在尝试编译上面的代码时,我得到了几个错误,例如:
error: no matching function for call to ‘begin(std::vector<std::basic_string<char> > (&) (std::istream_iterator<std::basic_string<char> >, std::istream_iterator<std::basic_string<char> > (*) ()))’
for(auto s : strings)
^
Run Code Online (Sandbox Code Playgroud)
还有其他几个......
我想我在这里遗漏了一些明显的东西,有人可以帮忙吗?
我在使用Visual Studio 2008(专业版)时尝试使用OpenCV遇到了一些困难.我相信我已经完成了运行OpenCV示例所需的一切,但由于运行时错误导致崩溃.这让我疯了,我希望有人可以提供帮助.
但首先要做的事情.
从sourcefourge.net 下载OpenCV 2.4.5.
出现提示时,我选择"Z:\ Games instalados\OpenCV"作为从上面链接下载的.exe中的"Extract to"选项.
转到"控制面板" - >"系统" - >"高级系统设置",然后单击"高级"选项卡中的"环境变量".在"系统变量"框中,我突出显示"路径",然后单击"编辑...".在新窗口中,我在"变量值"的文本末尾添加了一个带有";"的安装目录 在它之前,即"; Z:\ Games instalados\OpenCV\opencv\build\x86\vc11\bin"(不带双引号).这是一个截图:
.
在新窗口中单击"下一步",然后选择"控制台应用程序","清空项目",然后选择"完成". 


我正在使用OpenCV 2.2。
如果我cvFindChessboardCorners用来查找棋盘的拐角,则这些拐角按什么顺序存储在变量中corners(例如,首先是左上角,然后是行,然后是列)?
文档(没有太大帮助)。
这符合我的预期:
for i=1:100
hold on;
plot(i,i^2);
drawnow;
end
Run Code Online (Sandbox Code Playgroud)
绘制点在同一图中.
另一方面,这不是:
for i=1:100
hold on;
plot3(i,i^2,sqrt(i));
drawnow;
end;
Run Code Online (Sandbox Code Playgroud)
由于它没有显示点的3d图,因此它仅显示它们在xy平面中的投影.不知何故,这个hold on陈述与plot3混淆了.
plot在3d情况下,当我在几个3d位置有点时,如何获得类似于2d情况的结果?
我试图让这个问题简明扼要,如果你认为我没有很好地解释它以获得满意的答案,请在评论中说明.
我听说如果你需要对你的软件进行颜色分割(如果它们满足某些阈值规则,如R <100,G> 100,10 <B <123,则通过将像素设置为1,从彩色图像创建二进制图像)最好先将图像转换为HSV.这是真的吗?为什么?
在我笔记本中的一个单元格中,我已经绘制了一些东西
myplot = plt.figure()
plt.plot(x,y)
现在,在一个不同的单元格中,我想再次绘制完全相同的数字,但在它上面添加新的图(类似于连续两次调用时发生的情况plt.plot()).我尝试的是在新单元格中添加以下内容:
myplot
plt.plot(xnew,ynew)
然而,我在新单元格中获得的唯一内容是新的情节,没有前一个情节.
怎么能实现这个目标?
c++ ×2
opencv ×2
python ×2
c ×1
c++11 ×1
color-space ×1
colors ×1
fstream ×1
hsv ×1
keras ×1
matlab ×1
matplotlib ×1
plot ×1
tensorflow ×1
vector ×1