我正在尝试在tf.Keras(TensorFlow 2.0.0rc0)中为稀疏注释数据的3-D U-Net 实现依赖于样本和像素的依赖损失加权(Cicek 2016,arxiv:1606.06650)。
这是我的代码:
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, losses, models
# disabling eager execution makes this example work:
# tf.python.framework_ops.disable_eager_execution()
def get_loss_fcn(w):
def loss_fcn(y_true, y_pred):
loss = w * losses.mse(y_true, y_pred)
return loss
return loss_fcn
data_x = np.random.rand(5, 4, 1)
data_w = np.random.rand(5, 4)
data_y = np.random.rand(5, 4, 1)
x = layers.Input([4, 1])
w = layers.Input([4])
y = layers.Activation('tanh')(x)
model = models.Model(inputs=[x, w], outputs=y)
loss = get_loss_fcn(model.input[1])
# …Run Code Online (Sandbox Code Playgroud) 以下代码编译并运行良好,但未按预期工作(比较代码中的注释)。我相信原因是 的生命周期is以 结束getFileIter,因此流缓冲区迭代器没有什么可以迭代的。(相比之下,我想我记得在 C# 中,is只要流缓冲区迭代器指向它,它就会存在,但在 C++ 中似乎并非如此。)
避免这种情况的一种解决方法是使用... *is = new std::ifstream(p),但这意味着完成后我必须自己处理指针。
是否有任何机制可以链接is其流缓冲区迭代器的生命周期?
// g++ test.cpp -o test && ./test
#include <iostream>
#include <fstream>
std::istreambuf_iterator<char> getFileIter(std::string p)
{
std::ifstream is(p);
//std::ifstream *is = new std::ifstream(p);
std::cout << "Read " << p << "? " << is.good() << std::endl;
return std::istreambuf_iterator<char>(is.rdbuf());
}
int main()
{
std::string p1("/etc/passwd");
std::string p2("/etc/group");
// Prints 1 as if the two files were identical
std::cout << …Run Code Online (Sandbox Code Playgroud) 由于hashlib.file_digest仅在 Python 3.11 中引入,因此我使用了先前代码的回退:
if sys.version_info < (3, 11):
digest = hashlib.sha256()
digest.update(file.read())
else:
digest = hashlib.file_digest(file, hashlib.sha256)
Run Code Online (Sandbox Code Playgroud)
在此文件上运行pylintPython 3.10 时,出现以下错误:
Module 'hashlib' has no 'file_digest' member (no-member)
我可以添加# pylint: disable=no-member到代码的底部分支,但随后我会得到
Useless suppression of 'no-member' (useless-suppression)
什么时候pylint在Python 3.11中运行。
考虑这个代码:
with open("tmp", "w") as f:
print(0)
print(1)
Run Code Online (Sandbox Code Playgroud)
这在另存为bug.py并使用python bug.py. 但我无法将此代码复制并粘贴到 python 解释器中:
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> with open("tmp", "w") as f:
... print(0)
... print(1)
File "<stdin>", line 3
print(1)
^
SyntaxError: invalid syntax
>>>
Run Code Online (Sandbox Code Playgroud)
语法错误在哪里?
编辑:这更普遍适用,如
if False:
pass
pass
Run Code Online (Sandbox Code Playgroud) 我想检查一个传递给函数的集合是否是有序的,即元素的顺序是固定的。(我不是在谈论“排序”。)
set未排序。lists 和tuples 是有序的。是否有我可以使用的通用测试?
我一直在查看fopen和的文档ifstream,但我找不到的是打开文件后是否需要查找文件的开头。我想我可以假设我不需要这样做,我所做的实验也支持这个假设,但我发现检查更安全。
more我喜欢使用括号中的命令块,因为它允许我立即将块中所有命令的输出通过管道传输到(或任何其他命令)。
通常,我也可以在这些块内添加注释(rem)。
但是,我似乎无法将这两个功能结合起来:带有注释的块more(或任何其他命令)根本不被执行。这是为什么?能解决吗?
@echo off
rem This works (prints X1)
(
echo X1
)
rem This works (prints X2)
(
echo X2
) | more
rem This works (prints X3)
(
rem
echo X3
)
rem Why does this print nothing?
(
rem
echo X4
) | more
rem Or this?
(
echo X4
rem
) | more
rem This works (prints X5)
(
:: Using colons instead of rem
echo X5
) | more
Run Code Online (Sandbox Code Playgroud) 我在https://cpp.sh/中尝试了以下操作。正如您所看到的,我没有找到跨编译器工作的单行示例。特别是,我想知道看似标准代码中的 MSVC 静态断言:
#include <barrier>
#include <functional>
class Class {
// missing template argument
// std::barrier my_barrier1;
// static assert N4861 in MSVC
// std::barrier<void(*)(void) noexcept> my_barrier2;
// static assert N4861 in MSVC
// std::barrier<std::function<void()>> my_barrier3;
// std::function does not like noexcept
// std::barrier<std::function<void() noexcept>> my_barrier3b;
// compiles in MSVC but not here
// std::barrier<std::_No_completion_function> my_barrier4;
// copied from MSVC - works in both
struct _No_completion_function {
void operator()() noexcept {}
};
std::barrier<_No_completion_function> my_barrier5;
};
int main() {
return …Run Code Online (Sandbox Code Playgroud) 我读过了
但是,我还没有找到答案的一个问题:使用extern "C"(例如,尽可能多的函数)是否存在(可能,未来)缺点?
更具体一点:添加extern "C"接口仅使用C功能的函数是否有任何缺点; 换句话说,那些不使用@ k-five答案中列出的功能的人?
我不明白为什么std::is_convertible_v<EnumClass, int>在这个例子中返回 false,特别是考虑到它static_cast<int>(enumClassValue)工作正常。
#include <iostream>
enum Enum {X = 5};
enum class EnumClass {X = 5};
int main() {
Enum enumValue = Enum::X;
std::cout << static_cast<int>(enumValue) << std::endl;
std::cout << std::is_convertible_v<Enum, int> << std::endl;
EnumClass enumClassValue = EnumClass::X;
std::cout << static_cast<int>(enumClassValue) << std::endl;
std::cout << std::is_convertible_v<EnumClass, int> << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)