环境
正如标题中已经提到的,在尝试加载保存的模型时,我的自定义损失函数出现了问题。我的损失如下:
def weighted_cross_entropy(weights):
weights = K.variable(weights)
def loss(y_true, y_pred):
y_pred = K.clip(y_pred, K.epsilon(), 1-K.epsilon())
loss = y_true * K.log(y_pred) * weights
loss = -K.sum(loss, -1)
return loss
return loss
weighted_loss = weighted_cross_entropy([0.1,0.9])
Run Code Online (Sandbox Code Playgroud)
所以在训练过程中,我将该weighted_loss函数用作损失函数,一切运行良好。训练完成后,我.h5使用model.save来自 keras API的标准函数将模型保存为文件。
问题
当我尝试通过加载模型时
model = load_model(path,custom_objects={"weighted_loss":weighted_loss})
Run Code Online (Sandbox Code Playgroud)
我得到一个ValueError告诉我损失未知的消息。
错误
错误消息如下所示:
File "...\predict.py", line 29, in my_script
"weighted_loss": weighted_loss})
File "...\Continuum\anaconda3\envs\processing\lib\site-packages\keras\engine\saving.py", line 419, in load_model
model = _deserialize_model(f, custom_objects, compile)
File "...\Continuum\anaconda3\envs\processing\lib\site-packages\keras\engine\saving.py", line 312, in _deserialize_model
sample_weight_mode=sample_weight_mode)
File "...\Continuum\anaconda3\envs\processing\lib\site-packages\keras\engine\training.py", …Run Code Online (Sandbox Code Playgroud) 环境
假设我有一个名为 的项目my_project,它使用来自名为 的特定 conda 环境的 python 解释器my_env。.vscode 当我设置项目的解释器时,我将在目录中获得以下 settings.json 文件my_project:
{
"python.pythonPath": "<path to conda>/envs/my_env/bin/python"
}
Run Code Online (Sandbox Code Playgroud)
问题
通过此配置,我希望my_env每次打开 VSCode 时都会在终端中自动激活my_project。但通常当我打开时,终端中my_project仅激活 anaconda 环境。base为了激活my_env我有不同的选项,这些选项都是手动的。
conda activate my_envstrg+shift+p并执行create new integrated terminal可能还有更多的方法可以做到这一点。
问题
我怎样才能避免这些东西,这样my_env当我打开my_project.
更多信息
环境
我目前正在尝试使用索贝尔滤波器计算图像梯度。起初我scipy.ndimage.sobel通过以下方式使用函数
sx = ndimage.sobel(im, axis=0,mode="constant")
sy = ndimage.sobel(im, axis=1,mode="constant")
sobel = np.hypot(sx,sy)
sobel *= 255 / np.max(sobel)
Run Code Online (Sandbox Code Playgroud)
然而,这仅将 (3x3) 索贝尔滤镜应用于我的图像,但我想尝试更大的滤镜。numpy因此我尝试用和计算图像梯度scipy.signal。首先我再次尝试了(3x3)过滤器。
filter_x = np.array([[-1,0,1],[-2,0,2],[-1,0,1]], dtype=np.float)
filter_y = np.array([[1,2,1], [0,0,0], [-1,-2,-1]], dtype = np.float)
sx = signal.convolve2d(im,filter_x,mode="same",boundary="symm", fillvalue=0)
sy = signal.convolve2d(im,filter_y,mode="same",boundary="symm", fillvalue=0)
sobel = np.hypot(sx,sy)
sobel *= 255 / np.max(sobel)
Run Code Online (Sandbox Code Playgroud)
正如这篇文章中的建议。
问题
不幸的是,这两种方法会导致完全不同的结果,这在这个问题中已经提到过。所以我更深入地挖掘了一下,发现scipy.ndimage.sobel使用该correlate1d函数而不是convolve2d或类似的东西(源代码)。不幸的是,无法查看该函数的源代码correlate1d,因为它的功能隐藏在_nd_image.pyd我的 conda 环境的 site-packages 文件夹中已编译的文件内。所以我的问题来了:
问题
有谁明确知道,到底是由什么计算的correlate1d …
我创建了一个新的 conda 环境,但是当我尝试通过以下方式安装 gdal 时
conda install -c anaconda gdal
Run Code Online (Sandbox Code Playgroud)
我收到了 CondaVerificationError。在这篇文章之后,我应该做类似的事情
conda clean --all
Run Code Online (Sandbox Code Playgroud)
据我所知,这将删除存储在 tarball 中的所有缓存包。这对我已经存在的其他环境有什么影响吗?或者这些球的唯一目的是您不必多次下载相同的软件包,并且当新环境想要安装一个已经作为 tarball 存在的软件包时,它会使用 tarball 解压缩软件包?
环境
假设我有一个创建 toast 消息的函数
fun makeToast(success: Boolean){
if (success){
Toast.makeText(someContext, "Success", Toast.LENGHT_SHORT).show()
}
}
Run Code Online (Sandbox Code Playgroud)
该函数用于另一个被挂起的函数,例如
suspend fun makeRequest(){
success = doSomeHTTPRequest()
makeToast(success)
}
Run Code Online (Sandbox Code Playgroud)
当我使用这个函数来执行请求时,我将在 IO 协程中执行它,例如 ie
CoroutineScope(IO).launch{
makeRequest()
}
Run Code Online (Sandbox Code Playgroud)
问题
像上面建议的那样做会导致:
java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare()
问题
解决此问题的最佳做法是什么?直接的方法是更改makeToast为
fun makeToast(success: Boolean){
if (success){
Looper.prepare()
Toast.makeText(someContext, "Success", Toast.LENGHT_SHORT).show()
Looper.loop()
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这感觉很尴尬,因为这意味着该函数makeToast已经知道它可能不会在主线程中调用,在我看来,这会产生奇怪的耦合。