我仍在努力理解 PyTorch autograd 系统。我正在努力解决的一件事是理解为什么.clamp(min=0)并且nn.functional.relu()似乎有不同的向后传球。
它特别令人困惑,因为它.clamp与reluPyTorch 教程中的等效用法相同,例如https://pytorch.org/tutorials/beginner/pytorch_with_examples.html#pytorch-nn。
我在分析具有一个隐藏层和 relu 激活(输出层中的线性)的简单全连接网络的梯度时发现了这一点。
据我了解,以下代码的输出应该只是零。我希望有人能告诉我我缺少什么。
import torch
dtype = torch.float
x = torch.tensor([[3,2,1],
[1,0,2],
[4,1,2],
[0,0,1]], dtype=dtype)
y = torch.ones(4,4)
w1_a = torch.tensor([[1,2],
[0,1],
[4,0]], dtype=dtype, requires_grad=True)
w1_b = w1_a.clone().detach()
w1_b.requires_grad = True
w2_a = torch.tensor([[-1, 1],
[-2, 3]], dtype=dtype, requires_grad=True)
w2_b = w2_a.clone().detach()
w2_b.requires_grad = True
y_hat_a = torch.nn.functional.relu(x.mm(w1_a)).mm(w2_a)
y_a = torch.ones_like(y_hat_a)
y_hat_b = x.mm(w1_b).clamp(min=0).mm(w2_b)
y_b = torch.ones_like(y_hat_b)
loss_a = (y_hat_a - y_a).pow(2).sum()
loss_b …Run Code Online (Sandbox Code Playgroud) 我尝试使用从这个地方下载的权重和 cfg 在暗网上运行 Openpose:https : //github.com/lincolnhard/openpose-darknet
这是我尝试在 Opencv 中创建网络时出现的错误
modelConfiguration = path to cfg file
modelWeights = path to weights file
darknet = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
Run Code Online (Sandbox Code Playgroud)
() 中的错误回溯(最近一次调用)----> 1 暗网 = cv2.dnn.readNetFromDarknet(modelConfiguration, modelWeights)
错误: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\dnn\src\darknet\darknet_io.cpp:552: 错误: (-212:Parsing error) 不支持的激活: relu in function 'cv ::dnn::darknet::ReadDarknetFromCfgStream'
最近我观察到,在定义神经网络时,我们很多时候为每一层定义单独的 ReLU 对象。为什么我们不能在需要的地方使用相同的 ReLU 对象。
例如,不要这样写-
def __init__(self):
self.fc1 = nn.Linear(784, 500)
self.ReLU_1 = nn.ReLU()
self.fc2 = nn.Linear(500, 300)
self.ReLU_2 = nn.ReLU()
def forward(x):
x = self.fc1(x)
x = self.ReLU_1(x)
x = self.fc2(x)
x = self.ReLU_2(x)
Run Code Online (Sandbox Code Playgroud)
为什么我们不能使用
def __init__(self):
self.fc1 = nn.Linear(784, 500)
self.ReLU = nn.ReLU()
self.fc2 = nn.Linear(500, 300)
def forward(x):
x = self.fc1(x)
x = self.ReLU(x)
x = self.fc2(x)
x = self.ReLU(x)
Run Code Online (Sandbox Code Playgroud)
这是 PyTorch 特有的东西吗?
import numpy as np
def relu(z):
return np.maximum(0,z)
def d_relu(z):
z[z>0]=1
z[z<=0]=0
return z
x=np.array([5,1,-4,0])
y=relu(x)
z=d_relu(y)
print("y = {}".format(y))
print("z = {}".format(z))
Run Code Online (Sandbox Code Playgroud)
上面的代码输出:
y = [1 1 0 0]
z = [1 1 0 0]
Run Code Online (Sandbox Code Playgroud)
代替
y = [5 1 0 0]
z = [1 1 0 0]
Run Code Online (Sandbox Code Playgroud)
据我了解,我使用过的函数调用只应该按值传递,传递变量的副本。
为什么我的d_relu函数会影响y变量?
我正在尝试实现泄漏的Relu,问题是我必须对4维输入数组进行4 for循环。
有没有一种方法可以仅使用Numpy函数来进行泄漏的解析?
据我了解,在深度神经网络中,我们在应用权重(w)和偏差(b)后使用激活函数(g)(z := w * X + b | a := g(z)).因此有一个组合函数(g o z)和激活函数使得我们的模型可以学习除线性函数之外的函数.我看到Sigmoid和Tanh激活函数使我们的模型非线性,但是我看到ReLu(它取0和z的最大值)可以使模型非线性...
假设每个Z都是正数,那就好像没有激活函数......
所以我的问题是为什么ReLu在神经网络中制作非线性模型?
machine-learning neural-network deep-learning activation-function relu
我已经构建、安装并保存了以下模型:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras import preprocessing
from tensorflow.keras.models import Sequential
import config
from tensorflow.keras import applications
model = Sequential()
model.add(layers.Flatten(input_shape=input_shape.shape[1:]))
model.add(layers.Dense(100, activation=keras.layers.LeakyReLU(alpha=0.3)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(50, activation=keras.layers.LeakyReLU(alpha=0.3)))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(num_classes, activation='softmax'))
Run Code Online (Sandbox Code Playgroud)
我正在使用 load_model 函数进行评估,到目前为止我还没有遇到任何问题,但我现在收到以下错误:
ValueError: Unknown activation function: LeakyReLU
Run Code Online (Sandbox Code Playgroud)
我应该对架构进行任何语法更改吗?或者这里是否存在更深层次的问题?任何建议将不胜感激,因为我已经尝试设置一些自定义对象,如下所述: https: //github.com/BBQuercus/deepBlink/issues/107
编辑:我在调用 load_model 的文件中导入如下:
import config
import numpy as np
from tensorflow.keras.preprocessing.image import img_to_array, load_img
from models.create_image_model import make_vgg
import argparse
from tensorflow.keras.models import load_model
import time
from tensorflow import keras …Run Code Online (Sandbox Code Playgroud)