我想把我的一些模型冻结.遵循官方文档:
with torch.no_grad():
linear = nn.Linear(1, 1)
linear.eval()
print(linear.weight.requires_grad)
Run Code Online (Sandbox Code Playgroud)
但它打印True
而不是False
.如果我想在eval模式下设置模型,我该怎么办?
请原谅新问题,但这Module
和说的一样model
吗?
当文档说:
每当您想要一个比现有模块的简单序列更复杂的模型时,都需要定义模型(作为自定义
Module
子类)。
或者...当他们提到时Module
,他们指的是更正式和计算机科学的东西,例如协议/接口类型的东西吗?
在培训预先预测的估算器时,打印精度指标以及丢失的最简单方法是什么?
大多数教程和文档似乎都解决了当您创建自定义估算器时的问题 - 如果打算使用其中一个可用的估算器,这似乎有点过头了.
tf.contrib.learn有一些(现已弃用)Monitor钩子.TF现在建议使用钩子API,但看起来它实际上没有任何可以利用标签和预测来生成准确度数字的东西.
我试图在顺序模型中绕过跳过连接.使用功能API,我会做一些简单的事情(快速示例,可能不是100%语法正确,但应该得到的想法):
x1 = self.conv1(inp)
x = self.conv2(x)
x = self.conv3(x)
x = self.conv4(x)
x = self.deconv4(x)
x = self.deconv3(x)
x = self.deconv2(x)
x = torch.cat((x, x1), 1))
x = self.deconv1(x)
Run Code Online (Sandbox Code Playgroud)
我现在正在使用顺序模型并尝试执行类似的操作,创建一个跳过连接,将第一个conv层的激活一直带到最后一个convTranspose.我已经看过这里实现的U-net架构,它有点令人困惑,它做了这样的事情:
upconv = nn.ConvTranspose2d(inner_nc * 2, outer_nc,
kernel_size=4, stride=2,
padding=1, bias=use_bias)
down = [downrelu, downconv, downnorm]
up = [uprelu, upconv, upnorm]
if use_dropout:
model = down + [submodule] + up + [nn.Dropout(0.5)]
else:
model = down + [submodule] + up
Run Code Online (Sandbox Code Playgroud)
这不仅仅是按顺序向顺序模型添加图层吗?有一个down
conv后面跟着submodule
(递归地添加内层),然后连接到up
upconv层.我可能遗漏了一些关于Sequential …
我设置了一个以文件名队列开头的管道,如下面的伪代码:
filename_queue = tf.train.string_input_producer(["file0.pd", "file1.pd"])
Run Code Online (Sandbox Code Playgroud)
指向TFRecords
包含多个序列化tf.train.Example
图像.跟随张量流指导一个函数,它读取一个例子:
def read_my_file_format(filename_queue):
reader = tf.SomeReader()
key, record_string = reader.read(filename_queue)
example, label = tf.some_decoder(record_string)
processed_example = some_processing(example)
return processed_example, label
Run Code Online (Sandbox Code Playgroud)
用于批处理队列:
def input_pipeline(filenames, batch_size):
filename_queue = tf.train.string_input_producer(filenames)
example, label = read_my_file_format(filename_queue)
example_batch, label_batch = tf.train.shuffle_batch(
[example, label], batch_size=batch_size, capacity=100,
min_after_dequeue=10)
return example_batch, label_batch
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法将数据随机分成训练和测试集.我不想将训练和测试集保存到不同的文件中,但是图像被随机分配给训练或测试集,而与他们从中读取的文件无关.理想情况下,我想将输入管道拆分为训练和测试队列.
当我必须拆分一个庞大的数据集时,这就是我通常在numpy中所做的事情
import numpy as np
from numpy.random import choice
from numpy.random import RandomState
queue = range(10)
weights = (.8,.2) # create 2 partitions with this weights
def …
Run Code Online (Sandbox Code Playgroud) 我想用np数组初始化RNN的参数。
在以下示例中,我想传递w
给的参数rnn
。我知道pytorch提供了许多初始化方法,例如Xavier,uniform等,但是是否可以通过传递numpy数组来初始化参数?
import numpy as np
import torch as nn
rng = np.random.RandomState(313)
w = rng.randn(input_size, hidden_size).astype(np.float32)
rnn = nn.RNN(input_size, hidden_size, num_layers)
Run Code Online (Sandbox Code Playgroud) 我会尽力在这里提供一个可重复的例子.
我有一张图片:
这张Aaron Eckhart的照片是 (150, 150)
我的目标是在像素上做数学运算来扰乱这个图像的ROI,但是,问题是,数学必须作为一个tensorflow张量完成,因为做数学运算是由它的缩放梯度乘以张量(这也是一个大小的张量(row_pixels,column_pixels,3))
所以这是我想象的过程:
读入图像为numpy数组RGB大小:(1,150,150,3)(1是批量大小)
w, h = img.shape
ret = np.empty((w, h, 3), dtype=np.uint8)
ret[:, :, 0] = ret[:, :, 1] = ret[:, :, 2] = img
使像素值介于0和1之间
img = (faces1 - min_pixel) / (max_pixel - min_pixel)
for i in range(steps):
(a)提取图像的ROI 这是我不明白该怎么做的部分
(b)计算较小的img ROI张量损失的梯度
loss = utils_tf.model_loss(y, preds, mean=False)
grad, = tf.gradients(loss, x)
Run Code Online (Sandbox Code Playgroud)
(c)通过损失梯度乘以img ROI张量
scaled_grad = eps * normalized_grad
adv_img = img + scaled_grad
Run Code Online (Sandbox Code Playgroud)
(d)将这个新扰动的ROI张量放回到原始张量中的相同位置这是另一部分我不明白该怎么做
这将导致图像中仅一些像素值被扰动而其余像素值保持不变
在 pytorch 中,我们需要NCHW
格式的图像,但我的图像是NHWC
.
将此图像提供给 CNN 的程序是什么?(我发现这个解决方案建议使用“置换”,但我应该在哪里以及如何使用它?)
我有一个数据库,可以将文件夹关系建模n
为嵌套级别。对于任何给定的文件夹,我想生成所有子文件夹的列表。
假设我有一个名为 的函数getChildFolders()
,那么调用这种递归循环的最有效方法是什么?
以下代码适用于 4 级嵌套,但我希望在指定递归深度或在没有更多子级可跟随时智能地停止循环方面具有更大的灵活性。
folder_ids = []
folder_ids.append(folder.id)
for entry in child_folders:
folder_ids.append(entry.id)
child_folders_1 = getChildFolders(entry.id)
for entry_1 in child_folders_1:
folder_ids.append(entry_1.id)
child_folders_2 = getChildFolders(entry_1.id)
for entry_2 in child_folders_2:
folder_ids.append(entry_2.id)
child_folders_3 = getChildFolders(entry_2.id)
for entry_3 in child_folders_3:
folder_ids.append(entry_3.id)
Run Code Online (Sandbox Code Playgroud) 我定义了一个名为的自定义图层CapsuleLayer
。实际模型已在单独的类中定义。我已将权重加载到实际模型中,并将模型保存在.h5
文件中。但是,当我尝试使用加载模型时load_model(filepath)
,出现错误
ValueError:未知层:CapsuleLayer
加载保存的模型时,如何将自定义图层合并到模型中。
python ×9
pytorch ×5
tensorflow ×3
class ×1
dataset ×1
image ×1
keras ×1
keras-layer ×1
loops ×1
nested ×1
numpy ×1
permutation ×1
python-3.x ×1
recursion ×1
rnn ×1
sequential ×1
tensorboard ×1