我正在编写一个自定义目标来训练Keras(带有tensorflow后端)模型,但我需要调试一些中间计算.为简单起见,假设我有:
def custom_loss(y_pred, y_true):
diff = y_pred - y_true
return K.square(diff)
Run Code Online (Sandbox Code Playgroud)
我无法找到一种简单的方法来访问,例如,在训练期间中间变量diff或其形状.在这个简单的例子中,我知道我可以返回diff来打印它的值,但是我的实际损失更复杂,我不能在没有编译错误的情况下返回中间值.
有没有一种简单的方法来调试Keras中的中间变量?
我正在讨论在C++中实现策略模式的最佳方法.到目前为止,我一直使用标准方式,其中上下文具有指向基本策略类的指针,如下所示:
class AbstractStrategy{
public:
virtual void exec() = 0;
}
class ConcreteStrategyA{
public:
void exec();
}
class ConcreteStrategyB{
public:
void exec();
}
class Context{
public:
Context(AbstractStrategy* strategy):strategy_(strategy){}
~Context(){
delete strategy;
}
void run(){
strategy->exec();
}
private:
AbstractStrategy* strategy_;
Run Code Online (Sandbox Code Playgroud)
由于有指向对象的指针可能会导致不良行为,我一直在寻找一种更安全的方式来实现这种模式,我发现这个问题在哪里std::function被提议作为处理这种模式的更好方法.
有人可以更好地解释一下如何std::function运作,也许有一个战略模式的例子?
我正在使用boost执行单元测试.当我使用BOOST_CHECK_CLOSE时,我收到此失败消息:
difference{inf%} {-6.9388939e-18} and (0.0){0} exceeds 1.0000000000000001e-05%
Run Code Online (Sandbox Code Playgroud)
这听起来很奇怪,因为-6.9388939e-18和0.0之间的差异低于1.0000000000000001e-05%.此外,我不明白为什么它说差异是无限的.
有关这种行为背后原因的任何想法?
我需要编写一个复制构造函数,它还传输要复制的对象的unique_ptr成员的所有权.情况如下:
class C{
// C class stuff
};
class A{
public:
public A();
public A(const A& a);
private:
std::unique_ptr<C> c_;
}
class B{
public:
B(const A& b) : a_(a){}
private:
A a_;
};
Run Code Online (Sandbox Code Playgroud)
我该如何实现复制构造函数A?
我正在使用一个库,该库使用google日志库记录错误并使用CHECK宏检查断言.在我的代码中,我想在CHECK条件失败时捕获异常(例如,当应用程序因为它不存在而无法打开文件时),但即使使用catch(...)它也没有捕获任何内容并且程序崩溃而没有控制.
有没有办法在CHECK宏失败时捕获异常?或者,如果不可能,是否有解决方法来处理这些情况?
我编写了一个程序,用于在一组图像上使用gpu :: BroxOpticalFlow计算光流。在单线程执行的情况下,代码可以编译并正常运行。
由于我试图为光流计算找到最佳的参数配置,因此需要在同一组图像上多次运行代码。因此,为了加快处理速度,我决定使用多线程来并行运行具有不同参数的多个光流计算。为此,我只需为每个光流过程创建一个线程,并使用完全不同的对象和变量。
运行代码时,有时会从计算光流的gpu函数中获取以下运行时错误:
OpenCV Error: Gpu API call (NCV Assertion Failed: cudaError_t=77, file=/home/user/opencv-2.4.10/modules/gpu/src/nvidia/NCVBroxOpticalFlow.cu, line=1018
) in outputHandler, file /home/user/opencv-2.4.10/modules/gpu/src/optical_flow.cpp, line 72
OpenCV Error: Gpu API call (NCV Assertion Failed: cudaError_t=77, file=/home/user/opencv-2.4.10/modules/gpu/src/nvidia/NCVBroxOpticalFlow.cu, line=1018
) in outputHandler, file /home/user/opencv-2.4.10/modules/gpu/src/optical_flow.cpp, line 72
OpenCV Error: Gpu API call (NCV Assertion Failed: cudaError_t=77, file=/home/user/opencv-2.4.10/modules/gpu/src/nvidia/NCVBroxOpticalFlow.cu, line=1018
) in outputHandler, file /home/user/opencv-2.4.10/modules/gpu/src/optical_flow.cpp, line 72
OpenCV Error: Gpu API call (an illegal memory access was encountered) in copy, file /home/user/opencv-2.4.10/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp, line 877 …Run Code Online (Sandbox Code Playgroud) 我推断返回对方法内创建的对象的引用的最佳方法,如下面的情况:
class A{
public:
A(){}
~A(){}
};
class Foo{
public:
Foo(){}
~Foo(){}
A& create(int random_arg){
// create object A and return its reference
}
};
void other_method(){
Foo f;
A a = f.create();
// do stuff with a
{
Run Code Online (Sandbox Code Playgroud)
我考虑了三种可能的解决方案:
创建一个原始指针并返回一个引用,但这很糟糕,因为无法保证该对象将被正确删除:
A& create(int random_arg){
A* a = new A();
return *a;
}
Run Code Online (Sandbox Code Playgroud)创建一个shared_ptr并按值返回shared_ptr.通过这种方式,shared_ptr将处理对象删除:
shared_ptr<A> create(int random_arg){
boost::shared_ptr<A> a_ptr(new A());
return a_ptr;
}
Run Code Online (Sandbox Code Playgroud)创建一个shared_ptr并返回一个引用:
A& create(int random_arg){
boost::shared_ptr<A> a_ptr(new A());
return *a_ptr;
}
Run Code Online (Sandbox Code Playgroud)第二个解决方案似乎是最常用的,但是这样我必须在应用程序中传播shared_ptr,我宁愿有引用或更好的const引用.
您认为处理这种情况的最佳方法是什么?还有其他我未考虑过的可能性吗?
我A在方法中创建了一个类的对象.此方法还创建一个对象的实例,该对象B将A刚刚创建的对象作为构造函数参数.B必须获取对象的所有权,A但不能修改它.这意味着A删除时应B删除,但在其生命周期内B无法修改A.
在这种情况下,std::unique_ptr<const A>作为成员变量B是转移A(std::move在构造函数中使用B)的所有权并保证不会被修改的正确方法吗?
我正在构建一个允许共享带有自定义参数(动态生成的优惠券代码)的链接的 Web 平台。此链接可以粘贴到 Whatsapp 中。使用 whatsapp Web 和在 iOS 下一切正常。但是,在 Android Whatsapp 应用程序中,该链接并未完全识别为超链接。特别是,如果我将http://test1234.com?r=action&id=xxx 之类的链接发送给朋友,则只有第一部分http://test1234.com被识别为超链接,因此可以单击。url 的其余部分被认为是简单的文本,因此,除非用户执行完整 url 的手动复制,否则用户将被重定向到没有操作 r=action 和参数 id=xxx 的页面。关于为什么这只发生在Android上的任何线索?这个问题有什么解决办法吗?
我有以下html代码呈现角度ui-bootstrp轮播:
<div class="slider" uib-carousel active="active" interval="myInterval" >
<div uib-slide ng-repeat="slide in slides track by slide.id" index="slide.id">
<img ng-src="{{slide.image}}">
</div>
</div>
<div class="row">
<div class="margin-top">
<div ng-repeat="slide in thumbnails">
<img ng-src="{{slide.image}}" ng-click="setActive(slide.id)">
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
而setActive函数是:
$scope.thumbnails = $scope.slides.slice((0,5);
$scope.setActive = function(idx) {
$scope.active=idx;
}
Run Code Online (Sandbox Code Playgroud)
当我单击缩略图时,滑块正确显示所选图像.但是,只要我点击旋转木马箭头,缩略图的ng-click就会停止工作(该功能通过角度调用,但旋转木马不会滑动到所选图像).我怎样才能解决这个问题?
我们正在开发一个 Yii 网络应用程序,在本地笔记本电脑上设置它后,我们将项目推送到 git 存储库(没有vendor目录)。现在我想把它拉到另一台本地机器上,但是当我尝试这样做时,供应商目录当然不存在并且我收到一些错误(例如,访问 index.php 时出现空白页,运行要求时出错。 php...)。
我应该也推送供应商目录还是为每台本地机器下载 yii2 框架更好?在第二种情况下,我应该怎么做,因为我们之前已经使用 Composer 创建了项目并且我们不想再次调用它?或者有没有更好的方法来用 git 处理 Yii 项目?
我有一个类A有vector<Object> object_list_一个成员变量。
我知道如果我有一个指针向量,我将需要编写一个特定的复制构造函数来实现深度复制。但是,在这种情况下,由于我没有指针,因此在复制 type 的对象时A,默认的复制构造函数也会自动调用Object或每个元素的复制构造函数,或者object_list_我是否必须编写自己的复制构造函数来执行此操作?
c++ ×8
c++11 ×2
ownership ×2
pointers ×2
unique-ptr ×2
android ×1
angularjs ×1
boost ×1
carousel ×1
const ×1
debugging ×1
exception ×1
git ×1
gpu ×1
hyperlink ×1
keras ×1
member ×1
opencv ×1
php ×1
return-value ×1
shared-ptr ×1
std-function ×1
tensorflow ×1
try-catch ×1
unit-testing ×1
vector ×1
whatsapp ×1
yii ×1