Keras:制作神经网络来查找数字的模数

2023-11-24

我是一位经验丰富的 Python 开发人员,但在机器学习方面完全是新手。这是我第一次尝试使用 Keras。你能告诉我我做错了什么吗?

我正在尝试制作一个神经网络,它接受二进制形式的数字,并在除以 7 时输出其模数。(我的目标是执行一个非常简单的任务,只是为了看看一切正常。)

在下面的代码中,我定义了网络并使用 10,000 个随机数对其进行训练。然后我用 500 个随机数进行测试。

由于某种原因,我得到的准确度约为 1/7,这是您期望从完全随机算法获得的准确度,即我的神经网络没有做任何事情。

谁能帮我找出问题所在吗?

import keras.models
import numpy as np
from python_toolbox import random_tools

RADIX = 7

def _get_number(vector):
    return sum(x * 2 ** i for i, x in enumerate(vector))

def _get_mod_result(vector):
    return _get_number(vector) % RADIX

def _number_to_vector(number):
    binary_string = bin(number)[2:]
    if len(binary_string) > 20:
        raise NotImplementedError
    bits = (((0,) * (20 - len(binary_string))) +
            tuple(map(int, binary_string)))[::-1]
    assert len(bits) == 20
    return np.c_[bits]


def get_mod_result_vector(vector):
    return _number_to_vector(_get_mod_result(vector))


def main():
    model = keras.models.Sequential(
        (
            keras.layers.Dense(
                units=20, activation='relu', input_dim=20
            ),
            keras.layers.Dense(
                units=20, activation='relu'
            ),
            keras.layers.Dense(
                units=20, activation='softmax'
            )
        )
    )
    model.compile(optimizer='sgd',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])

    data = np.random.randint(2, size=(10000, 20))
    labels = np.vstack(map(get_mod_result_vector, data))

    model.fit(data, labels, epochs=10, batch_size=50)
    def predict(number):
        foo = model.predict(_number_to_vector(number))
        return _get_number(tuple(map(round, foo[0])))
    def is_correct_for_number(x):
        return bool(predict(x) == x % RADIX)
    predict(7)
    sample = random_tools.shuffled(range(2 ** 20))[:500]
    print('Total accuracy:')
    print(sum(map(is_correct_for_number, sample)) / len(sample))
    print(f'(Accuracy of random algorithm is {1/RADIX:.2f}')


if __name__ == '__main__':
    main()

这实现了 99.74% 的准确率和 99.69% 的验证准确率。

import tensorflow as tf, numpy as np

def int2bits(i,fill=20): 
    return list(map(int,bin(i)[2:].zfill(fill)))

def bits2int(b):
    return sum(i*2**n for n,i in enumerate(reversed(b)))

# Data. 
I = np.random.randint(0,2**20,size=(250_000,))
X = np.array(list(map(int2bits,I)))
Y = np.array([int2bits(2**i,7) for i in I % 7])

# Test Data. 
It = np.random.randint(0,2**20,size=(10_000,))
Xt = np.array(list(map(int2bits,It)))
Yt = np.array([int2bits(2**i,7) for i in It % 7])

# Model.
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(1000,'relu'),
    tf.keras.layers.Dense(7,'softmax'), 
])
model.compile('adam','categorical_crossentropy',['accuracy'])

# Train.
model.fit(X,Y,10_000,100,validation_data=(Xt,Yt))

一些要点:

1)你的数据太少了。您对从 0 到 2**20 的点进行统一采样,但只采样了 10,000 个,这仅占模型应该了解的可能向量的 1% 左右。关键是,许多组件(以二进制表示形式)大多固定为 0 或 1,而没有机会了解它们在整体数据中的功能或它们如何与其他组件交互。

2)你需要一个嵌入层,即将空间扩展到一些巨大的更高维度,这样神经元就可以更容易地移动。这使得学习能够更好地洗牌,希望找到您正在寻找的算法。单个 Dense(1000) 似乎可以工作。

3) 运行 10_000 批(只是为了最大限度地提高 CPU 使用率)。跑了 100 个 epoch。在训练中包含我的validation_data,这样我就可以看到验证集在每个时期的表现如何(这不会影响训练,只是可以更容易地看到模型在训练时是否表现良好)。

谢谢。 :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras:制作神经网络来查找数字的模数 的相关文章

  • 如何测试顶级窗口是否打开?

    我感觉 Python 编程可能不是我的菜 我创建了一个 tkinter GUI 它使用按钮回调来打开另一个窗口 其他搜索说这个窗口应该是顶级窗口 并且它工作得很好 但是每次按下按钮时它都会打开另一个相同的窗口 如据我所知 窗口 问题 如何测
  • 如何配置散景图以具有响应宽度和固定高度

    我使用通过组件功能嵌入的散景 实际上我使用 plot sizing mode scale width 它根据宽度进行缩放并保持纵横比 但我想要一个响应宽度但固定或最大高度 这怎么可能实现呢 有stretch both and scale b
  • 刷新访问令牌时出现“invalid_grant”错误的情况?

    最近我一直在为这个问题揪心 一些背景 使用oauth2客户端 https code google com p google api python client 库来管理用户的令牌 这些令牌用于定期并发执行各种后台任务 每次要为用户运行其中一
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • Keras,如何获取每一层的输出?

    我已经用 CNN 训练了一个二元分类模型 这是我的代码 model Sequential model add Convolution2D nb filters kernel size 0 kernel size 1 border mode
  • 将 stdout 重定向到 Python 中的文件? [复制]

    这个问题在这里已经有答案了 如何将 stdout 重定向到 Python 中的任意文件 当长时间运行的 Python 脚本 例如 Web 应用程序 从 ssh 会话内启动并处于后台 并且 ssh 会话关闭时 应用程序将引发 IOError
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • 如何通过facebook-sdk python api获取用户帖子?

    我使用 facebook jssdk 授权我的应用程序读取用户个人资料和用户帖子 FB login function response scope user status user likes user photos user videos
  • 对于神经网络来说,拥有正态分布的数据重要吗?

    因此 与数据相关的标准操作之一就是对其进行归一化 并将其标准化为均值为 0 标准差为 1 的正态分布数据 对吧 但是 如果数据不是正态分布怎么办 另外 所需的输出也必须呈正态分布吗 如果我希望我的前馈网络在两个类 1 和 1 之间进行分类
  • 指定 Parquet 属性 pyspark

    如何在 PySpark 中指定 Parquet 块大小和页面大小 我到处搜索 但找不到任何有关函数调用或导入库的文档 根据火花用户档案 https mail archives apache org mod mbox spark user 2
  • 如何在 Spyder IDE 中安装 Selenium 包

    我刚刚在工作中安装了 Spyder IDE 仅 Spyder 不是整个 Anaconda 并且希望使用 FireFox 自动化我的工作 我的问题是 如何安装 Selenium 软件包 I figured it out Here is ins
  • 如何使用 python-gnupg 加密大型数据集而不占用所有内存?

    我的磁盘上有一个非常大的文本文件 假设它是 1 GB 或更多 还假设该文件中的数据有 n每 120 个字符一个字符 我在用python gnupg https pythonhosted org python gnupg 对此文件进行加密 由
  • 带有整数的 np.sqrt 和 where 条件返回错误结果

    当我将 numpy sqrt 方法应用于带有 a 的整数数组时 我得到了奇怪的结果where健康 状况 见下文 对于整数 a np array 1 4 9 np sqrt a where a gt 5 Out 3 array 0 0 5 3
  • Synapse Notebook 参考 - 使用参数从另一个笔记本调用 Synapse Notebook

    我有一个带有参数的突触笔记本 我试图从另一个笔记本调用该笔记本 我正在使用 run 命令 我应该如何将参数从基本笔记本传递到正在调用的笔记本 另外 对我来说 上述答案不起作用 作为对此问题的单独解决方案 下面是一个答案 打开笔记本并转到最右
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y
  • 如何指定一个变量作为类或类实例的成员变量?

    在最新的 Python 2 7 x 中 给定类定义内的任何成员变量 该成员变量是否始终处于类级别 因为它是由该类的所有实例共享的单个变量 在类的定义中 如何指定 类定义中的哪些成员变量属于该类 因此由该类的所有实例共享 以及 哪些属于该类的
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量
  • 将笔记本生成的 HTML 片段转换为 LaTeX 和 PDF

    在我的笔记本里有时会有 from IPython display import display HTML display HTML h3 The s is important h3 question of the day 但当我后来将笔记本

随机推荐

  • PostSharp后pdb文件丢失

    我正在使用 PostSharp 版本 2 1 6 4 也尝试了最新版本 2 1 7 35 有时 pdb 文件丢失 并且其中有一个 pssym 文件
  • 拥有 SQLite 和多个表的自己的 ContentProvider

    我在读本教程关于实现我自己的 ContentProvide 以使用 SQLite 在 ContentProvider query 中 有一些事情让我困惑 它似乎非常硬编码为一张表 教程中的待办事项表 但也许我只是不明白 现在 如果我想查询另
  • Python-删除旧文件

    我对 python 有点陌生 一直在尝试自己解决这个问题 但到目前为止只得到了一些零碎的东西 基本上 我正在寻找一个脚本 它将递归搜索目录及其子目录 并删除至少 24 小时前的文件 但不会更改目录 非常感谢任何建议或示例 这使用了os wa
  • jQuery 真正支持哪些 CSS3 选择器,例如:第n个最后一个孩子()?

    根据http api jquery com category selectors 我们可以在 jQuery 中使用大量的 CSS 选择器 但是例如 nth last child 那里没有提到 然而 当我测试以下内容时 使用来自 Google
  • 生成固定长度整数分区的所有唯一排列的算法?

    我正在寻找一种生成整数固定长度分区的所有排列的算法 顺序并不重要 例如 对于 n 4 且长度 L 3 0 2 2 2 0 2 2 2 0 2 1 1 1 2 1 1 1 2 0 1 3 0 3 1 3 0 1 3 1 0 1 3 0 1 0
  • 单个 Git 存储库中的公共和私有代码

    我参与的一个研究小组目前将所有代码托管在一个私有 SVN 存储库中 我们想开放我们的代码并将大部分代码移至 Github 上 问题是 有些代码是敏感的 不应该开放 但我们仍然希望它处于版本控制之下 目前 我们在 Github 上有开放代码
  • WPF:PropertyChangedCallback 仅触发一次

    我有一个用户控件 它公开一个名为 VisibileItems 的 DependencyProperty 每次更新该属性时 我都需要触发另一个事件 为了实现这一点 我添加了带有 PropertyChangedCallback 事件的 Fram
  • 限制对 Elastic Beanstalk 的 HTTP 访问

    是否可以将对 Elastic Beanstalk 应用程序的 HTTP 访问限制为仅某些 IP 地址 我已尝试向环境的安全组添加规 则 但这些规则似乎没有任何效果 这是因为所有 HTTP 流量都是通过弹性负载均衡器路由的吗 isn t安全组
  • C# 继承和默认构造函数

    假设有一个基类A和一个班级B源自A 那么我们知道类的构造函数A永远不会被类继承B 然而 当一个新对象B创建 然后 类的默认构造函数A在类的默认 自定义构造函数之前调用B被调用 也许这样做的目的是类的字段A需要初始化为默认值 现在 假设该类A
  • 如何在 Kubernetes Pod 之间共享存储?

    我正在评估 Kubernetes 作为我们新应用程序的平台 现在看来 一切都非常令人兴奋 但是 我遇到了一个问题 我在 GCE 上托管集群 并且需要某种机制在两个 pod 持续集成服务器和我的应用程序服务器 之间共享存储 使用 kubern
  • 起订量索引属性并在返回/回调中使用索引值

    我想要起订量一个具有索引的属性 并且我希望能够在回调中使用索引值 就像您可以在回调中使用起订量方法的方法参数一样 可能最容易用一个例子来演示 public interface IToMoq int Add int x int y int t
  • Android + Proguard + Apache POI

    有人能够在混淆后让 Apache POI 库正常工作 我查阅了很多资料 尝试了不同的方法 但仍然得到错误 a a b a Provider com bea xml stream EventFactory not found org apac
  • 使用 Sed 替换包含字符串的整行

    我有一个文本文件 其中有一个特定的行 例如 sometext sometext sometext TEXT TO BE REPLACED sometext sometext sometext 我需要将上面的整行替换为 This line i
  • 智能感知中的自定义代码片段

    我已经开始将一些常用的代码块导出到自定义片段 有没有办法让这些显示在 IntelliSense 中 而不必使用上下文菜单或代码片段管理器中的代码片段浏览器 起初 我以为这与 ReSharper 有关 但当我禁用 ReSharper Inte
  • Android webkit 浏览器中的宽度不正确

    我注意到 Android 默认浏览器上有一个问题 100 宽度实际上可能会超出屏幕边缘 这是一个最小的测试用例 div class separator width 100 style border 2px padding 2px nbsp
  • 如何编写一个返回仅存在于类中的类型的成员函数?

    我实际上正在用 C 实现一个双向链表 这是某种 MWE namespace mynamespace template
  • 哪里有可靠的注册表项来查找 Excel 2007 的安装位置?

    哪里有可靠的注册表项来查找 Excel 2007 的安装位置 怎么样 HKEY LOCAL MACHINE SOFTWARE Microsoft Office X 0 Common InstallRoot 其中包含一个名为 Path 的键
  • django-rest-framework:如何序列化已包含 JSON 的字段?

    我对 django rest framework 很陌生 所以需要一些帮助 我有一个带有 TextField 的对象 该对象是包含 JSON 的字符串 我正在使用 django rest framework 将整个对象序列化为 JSON 然
  • 为什么禁止内联脚本(内容安全策略)?

    我想知道规范中的引用 https dvcs w3 org hg content security policy raw file tip csp specification dev html 为了获得最大的好处 作者需要将所有内联脚本和样式
  • Keras:制作神经网络来查找数字的模数

    我是一位经验丰富的 Python 开发人员 但在机器学习方面完全是新手 这是我第一次尝试使用 Keras 你能告诉我我做错了什么吗 我正在尝试制作一个神经网络 它接受二进制形式的数字 并在除以 7 时输出其模数 我的目标是执行一个非常简单的