【问题标题】:convert sess.run to pytorch将 sess.run 转换为 pytorch
【发布时间】:2020-08-10 20:02:33
【问题描述】:

我正在尝试将代码从 tf 转换为 pytorch。 我被卡住的代码部分是这个 sess.run。据我所知,pytorch 不需要它,但我找不到复制它的方法。我附上代码。

TF:

ebnos_db = np.linspace(1,6, 6)
bers_no_training = np.zeros(shape=[ebnos_db.shape[0]])
for j in range(epochs):
    for i in range(ebnos_db.shape[0]):
        ebno_db = ebnos_db[i]
        bers_no_training[i] += sess.run(ber, feed_dict={
            batch_size: samples,
            noise_var: ebnodb2noisevar(ebno_db, coderate)
        })
bers_no_training /= epochs

samples 是一个 int32,而 ebnodb2noisevar() 返回一个 float32。

TF 中的 BER 计算如下:

ber = tf.reduce_mean(tf.cast(tf.not_equal(x, x_hat), dtype=tf.float32))

在 PT 中:

wrong_bits = ( torch.eq(x, x_hat).type(torch.float32) * -1 ) + 1
ber = torch.mean(wrong_bits)

我认为BER计算得很好,但主要问题是我不知道如何将sess.run转换为PyTorch,也不完全了解它的功能。

谁能帮帮我?

谢谢

【问题讨论】:

    标签: python numpy tensorflow pytorch


    【解决方案1】:

    您可以在 PyTorch 中执行相同的操作,但使用 ber 时会更容易:

    ber = torch.mean((x != x_hat).float())
    

    足够了。

    是的,PyTorch 不需要它,因为它基于动态图构造(不像 Tensorflow 的静态方法)。

    tensorflow sess.run 用于将值输入到创建的图形中;这里名为batch_sizetf.Placeholder(图中的变量表示用户可以“注入”他的数据的节点)将得到samplesnoise_varebnodb2noisevar(ebno_db, coderate)

    将其转换为 PyTorch 通常很简单,因为您不需要任何类似图形的会话方法。只需使用正确输入的神经网络(或类似)(如samplesnoise_var)就可以了。你必须检查你的图表(ber 是如何从 batch_sizenoise_var 构造的)并在 PyTorch 中重新实现它。

    另外,在深入研究之前,请查看PyTorch introductory tutorials 以了解该框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2022-10-24
      • 2023-01-31
      • 2022-10-17
      相关资源
      最近更新 更多