Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow WGAN-GP大振荡损耗_Tensorflow_Machine Learning_Keras_Loss Function_Generative Adversarial Network - Fatal编程技术网

Tensorflow WGAN-GP大振荡损耗

Tensorflow WGAN-GP大振荡损耗,tensorflow,machine-learning,keras,loss-function,generative-adversarial-network,Tensorflow,Machine Learning,Keras,Loss Function,Generative Adversarial Network,我正在尝试训练一名WaveGAN,如下所述: 在本文中,WaveGAN是使用WGAN-GP进行训练的,因此我尝试自己通过改编以下代码来实现它:。然而,即使只经过2000步(~1历元),我得到的批评家和生成器的损耗值都很大(

我正在尝试训练一名WaveGAN,如下所述:

在本文中,WaveGAN是使用WGAN-GP进行训练的,因此我尝试自己通过改编以下代码来实现它:。然而,即使只经过2000步(~1历元),我得到的批评家和生成器的损耗值都很大(<1000),并且在正负之间振荡。我的音频与他们使用的钢琴录音相同,只是以16000Hz重新采样,然后从立体声转换为单声道

我的损失图表如下:

我希望有人能验证我的实现是否正确,如果正确,我可以运行什么实验来诊断这个问题

注意:
TIMESTEPS
表示我希望为每个生成器过程生成的样本数。目前,它被设置为1以复制WaveGAN,我希望在将来用它进行实验。目前,我认为这与这个问题无关

我的
train.py
脚本是:

将tensorflow导入为tf
从tensorflow.keras.optimizers导入Adam
将numpy作为np导入
进口藏红花
随机输入
导入操作系统
导入系统
导入时间
进口模型
GPU=tf.config.experimental.list\u物理\u设备('GPU'))
tf.config.experimental.set_memory_growth(GPU[0],True)
模型尺寸=64
样本数=16384
时间步长=1
D_更新每_G_更新=5
坡度\惩罚\权重=10.0
噪音=100
纪元=2000
每个样本的时间=2
批量大小=8
Fs=16000
第三类:
定义初始值(self,model_dims=model_dims,num_samples=num_samples,timesteps=timesteps,gradient_惩罚权重=gradient_惩罚权重,
噪音大小=噪音大小,批次大小=批次大小,sr=Fs):
self.model\u dims=model\u dims
self.num\u samples=num\u samples
self.timesteps=timesteps
self.noise\u dims=(时间步长,noise\u len)
self.batch\u size=批次大小
self.G=GANModels.Generator(self.model\u dims、self.timesteps、num\u samples)
self.D=GANModels.Critic(self.model\u dims、self.timesteps、num\u示例)
self.G_优化器=Adam(学习率=1e-4,beta_1=0.5,beta_2=0.9)
self.D_优化器=Adam(学习率=1e-4,beta_1=0.5,beta_2=0.9)
打印(self.G.summary())
打印(self.D.summary())
自梯度惩罚权重=梯度惩罚权重
self.sr=sr
定义损失(自我、逻辑、逻辑):
r_损失=-tf.reduce_平均值(r_logit)
f_损失=tf.减少平均值(f_logit)
返回r_损失,f_损失
定义损失(自我、后勤):
f_损失=-tf.reduce_平均值(f_logit)
返回f_损失
定义梯度惩罚(自我、真实、虚假):
def_插值(a,b):
shape=[tf.shape(a)[0]+[1]*(a.shape.ndims-1)
alpha=tf.random.uniform(shape=shape,minval=0,maxval=1)
inter=a+alpha*(b-a)
内部设置_形(a形)
回程国米
x=_插值(真、假)
将tf.GradientTape()作为t:
t、 手表(x)
pred=self.D(x,training=True)
梯度=t.梯度(pred,x)
范数=tf.范数(tf.重塑(梯度,[tf.形状(梯度)[0],-1]),轴=1)
gp=tf.减少平均值((标准值-1.)**2)
返回总成
@功能
def系列(自身):
将tf.GradientTape()作为t:
z=tf.random.normal(形状=(自身批量大小)+自身噪声亮度)
x_fake=self.G(z,training=True)
x_fake\u d_logit=self.d(x_fake,training=True)
G_损失=自我。_G_损失_fn(x_伪d_逻辑)
G_梯度=t梯度(G_损失,自G可训练变量)
self.G_优化器。应用_梯度(zip(G_梯度,self.G可训练_变量))
返回{'g_loss':g_loss}
@功能
def序列D(自身,x_真实):
将tf.GradientTape()作为t:
z=tf.random.normal(shape=(x_real.shape[0],)+self.noise#半假半真
x_fake=self.G(z,training=True)
x_real\u d_logit=self.d(x_real,training=True)
x_fake\u d_logit=self.d(x_fake,training=True)
x_真实损失,x_虚假损失=自我。x_真实损失(x_真实损失,x_虚假损失)
gp=自我。\梯度\惩罚(x\真,x\假)
D_损失=(x_真实D_损失+x_虚假D_损失)+gp*自梯度惩罚重量
D_梯度=t梯度(D_损失,自D可训练变量)
self.D_优化器。应用_梯度(zip(D_梯度,self.D可训练_变量))
返回{'d_loss':x_real_d_loss+x_fake_d_loss,'gp':gp}
def样本(自身、历元、数量样本=10):
z=tf.random.normal(形状=(样本数,)+self.noise\u dims)
结果=self.G(z,训练=False)
对于范围内的i(num_样本):
audio=np.array(结果[i,:,:])
audio.flatten()
librosa.output.write_wav(f“output/piano/{epoch}-{i}.wav”,audio,sr=self.sr)
#############################################################################
gan=gan()
X_列车=[]
对于os.listdir(r“D:\ML\u Datasets\mancini\u piano\piano\train)中的文件:
以open(r“D:\ML\u Datasets\mancini\u piano\piano\train“+fr”\{file}”、“rb”)作为f:
样本,ux=librosa.load(f,Fs)
如果len(samples)