TianLin0509/DNN_detection_via_keras

训练、数据集、预测相关的问题

Opened this issue · 4 comments

1.这里的疑问在于,每一次循环,样本加的是128bit导频和128bit数据(共256个数),却只加了前16个bit作为label(16个二进制数),那么样本和标签怎么能匹配的上,如何能进行训练呢?
2. 此外,我不太理解如何将一组数据(256个数),按照16位bit进行打包,然后进行进行预测的过程,我在程序里没有看到相关的部分,原文说的是用8个相同的网络对128bit进行预测,那其实输出层设置128个节点不好吗?
3. 另外,为什么这个数据集的信道状态是116的,跟输出节点有关吗?
加入导频是考虑和LS和MMSE进行比较,但在模型训练过程中,系统是否会把导频也一块儿进行训练和预测?
4.最后,training_gen与validation_gen似乎没有区别呀。输出层的节点是16,采用sigmoid将数据映射到0~1,论文也说将16个比特作为一组进行验证、预测。我看keras官方文档说可以用model.predict()返回y_pred,于是用model.predict(validation_gen(10000, 25),steps=1)进行了测试,输出的是1616的若干个二维数组,每个二维数组的前816我是不是应该认为是导频部分的?而二维数组的后816是不是应该认为是predict的值?既然说单个这样的网络只能预测16个比特,那在这返回的16*16二维数组中,应该认为哪个部分是当前的预测值?
望不吝赐教!

你好。 这里的有些问题其实是在别的issue里回复过的,这里就当汇总一下重新回复一遍:

  1. 文章中说明,目标是预测128个数据比特,但是分为8个独立的网络完成。 也就是说每个网络只需要预测16个,也就是你所看到的标签的维度。 你可以理解为是减少了每个网络的任务难度,从而提升了性能。

  2. 如上所述。 显然你可以设置为128, 你可以自己去试试,然后自己改一下标签就可以了。 我很早试过,网络会工作,但性能会下降。

  3. 信道状态16和输出的16的相等只是一个巧合。 信道的16代表了信道时域上的16个采样点。 模型训练过程中,系统也会带着导频一起训练。这样在线上使用时,网络才能学到如何使用导频来获取信道信息。

  4. 这是我代码的一点纰漏。 validation那边应该用test的那个npy文件的数据。但是逻辑一样。 之前也有人和我提过,但是对结果影响很小,你可以手动改一下 (理论上只要测试样本没在训练期间被使用过就具有一般性)
    我的test部分的代码逻辑没有问题。 如果你用predict的话也可以,但是会比较麻烦,因为你predict的结果还是要去和label比较来计算误码率,所以evaluate最省事。 predict的结果和导频无关,假设你predict的输入x是N个样本,那么输出就是N * 16的矩阵。 每一行对应每个样本的16个预测的bit。 和导频是没有关系的。 (第一维对应样本数)。

以上就是我对这些问题的回答,如果还有疑问,可以继续讨论,希望帮到了你。如果可以,可以点个star支持一下哈。

顺祝时祺。

您的回答使我茅塞顿开,热心的回复让我感到敬佩。有这部分的回复后,我需要先自己试验一下,这样才能更好的理解。有问题我也会继续追问的哈,谢谢

Dear Sir,
I really appreciate your hard work..and please I have a question, in main file line 48, why do you make (model.evaluate) on function called (validation_gen) which exactly contains the generation of training datasets not the test datasets??..

why did not you apply evaluation the model on testing datasets you provided , instead of training datasets ?
I'm waiting for your reply..
thanks in advance.

Dear sir, please what is the value of SNR (Signal Noise to ratio used in training the model ) ??