我想在tensorflow中创建一个动态丢失函数.我想计算信号FFT的能量,更具体地说,只计算最主要峰值周围的3号窗口.我无法在TF中实现,因为它会抛出很多错误,比如Stride和InvalidArgumentError (see above for traceback): Expected begin, end, and strides to be 1D equal size tensors, but got shapes [1,64], [1,64], and [1] instead.
我的代码是这样的:
self.spec = tf.fft(self.signal)
self.spec_mag = tf.complex_abs(self.spec[:,1:33])
self.argm = tf.cast(tf.argmax(self.spec_mag, 1), dtype=tf.int32)
self.frac = tf.reduce_sum(self.spec_mag[self.argm-1:self.argm+2], 1)
Run Code Online (Sandbox Code Playgroud)
由于我的64位批处理和数据维度也是64,因此形状self.signal为(64,64).我希望只计算FFT的AC分量.由于信号是真正有价值的,只有一半的频谱可以完成工作.因此,形状self.spec_mag是(64,32).
该fft中的最大值位于self.argm具有形状的位置(64,1).
现在我想通过以下方法计算最大峰值周围3个元素的能量:self.spec_mag[self.argm-1:self.argm+2].
但是,当我运行代码并尝试获取值时self.frac,我会遇到多个错误.
我正在使用 zalando 的代码,由 Nvidia 实现为渐进式 GAN。请参阅: https: //github.com/zalandoresearch/disentangling_conditional_gans
他们在训练时使用 3 个网络:G、D和Gs。所有三个模型都是https://github.com/zalandoresearch/disentangling_conditional_gans/blob/master/tfutil.py#L424Network中定义的类的实例
这些模型使用许多辅助函数进行存储和加载,这些函数使用 python 的 pickle 格式将 3 个模型保存为*.pkl.
我只对导出模型感兴趣Gs。
如何将其转换为保存的模型(因为代码不使用 tf.Saver),最后转换为冻结模型,以便我可以轻松推断。
加载模型后,我会:
allvars = [n.name for n in tf.get_default_graph().as_graph_def().node]
Gs_vars = [i for i in allvars if i.split('/')[0] == 'Gs']
Run Code Online (Sandbox Code Playgroud)
但是,当运行此命令时:
Gs_saver = tf.train.Saver({"Gs": Gs_vars})
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误说:
*** ValueError: Slices must all be Variables: Gs/latents_in
Run Code Online (Sandbox Code Playgroud)
使用该模型的正确实现Gs是:
images = Gs.run(latents, labels, masks, minibatch_size=minibatch_size, num_gpus=config.num_gpus, out_mul=127.5, out_add=127.5, out_shrink=image_shrink, …Run Code Online (Sandbox Code Playgroud) 我有以下功能,但是data当我运行时它会抛出错误,例如在分配之前访问过foo(-1)。我希望它返回None。我们可以从一个函数返回许多值,其中一个是有条件的。我不想在if elif构造中写返回。
def foo(x):
if x > 1:
data = range(0,10)
elif x < 0:
print 'not valid'
return 1, 2, 3, data or None
Run Code Online (Sandbox Code Playgroud)
除了在开始时定义数据,还有其他选择吗?像return 1, 2, 3, [data if data]使用列表理解之类的东西
我正在使用torch.save()来保存模型文件.但是,每次我保存它,它都会改变.为什么这样?
netG_1 = torch.load('netG.pth')
netG_2 = torch.load('netG.pth')
torch.save(netG_1, 'netG_1.pth')
torch.save(netG_2, 'netG_2.pth')
Run Code Online (Sandbox Code Playgroud)
使用md5sum *.pth:
779f0fefca47d17a0644033f9b65e594 netG_1.pth
476f502ec2d1186c349cdeba14983d09 netG_2.pth
b0ceec8ac886a11b79f73fc04f51c6f9 netG.pth
Run Code Online (Sandbox Code Playgroud)
该模型是此类的一个实例:
https://github.com/taoxugit/AttnGAN/blob/master/code/model.py#L397