Keras 是一个强大且易于使用的免费开源 Python 库,用于开发和评估深度学习模型。
它是 TensorFlow 库的一部分,允许您仅用几行代码即可定义和训练神经网络模型。
在本教程中,您将学习如何使用 Keras 在 Python 中创建您的第一个深度学习神经网络模型。
快速开始您的项目,阅读我的新书 Deep Learning With Python,其中包含分步教程和所有示例的Python 源代码文件。
让我们开始吧。
- 更新于 2017 年 2 月:更新了预测示例,以便在 Python 2 和 3 中都可以进行四舍五入。
- 更新于 2017 年 3 月:更新了最新版本的 Keras 和 TensorFlow 的示例。
- 2018 年 3 月更新:添加了下载数据集的备用链接。
- 更新于 2019 年 7 月:扩展并添加了更多有用的资源。
- 更新于 2019 年 9 月:更新了 Keras v2.2.5 API。
- 更新于 2019 年 10 月:更新了 Keras v2.3.0 API 和 TensorFlow v2.0.0。
- 更新于 2020 年 8 月:更新了 Keras v2.4.3 和 TensorFlow v2.3。
- 更新于 2021 年 10 月:`predict_class` 语法已弃用。
- 更新于 2022 年 6 月:更新为现代 TensorFlow 语法。

分步用 Keras 在 Python 中开发你的第一个神经网络
照片由 Phil Whitehouse 拍摄,部分权利保留。
Keras 教程概述
代码量不多,但我们会慢慢讲解,以便您将来知道如何创建自己的模型。
本教程将教您以下步骤:
- 加载数据
- 定义 Keras 模型
- 编译 Keras 模型
- 拟合 Keras 模型
- 评估 Keras 模型
- 整合所有内容
- 进行预测
此 Keras 教程做了一些假设。您需要具有:
- 已安装并配置的 Python 2 或 3
- 已安装并配置的 SciPy(包括 NumPy)
- 已安装并配置的 Keras 和后端(Theano 或 TensorFlow)
如果您需要有关环境的帮助,请参阅教程
创建一个名为 keras_first_network.py 的新文件,并在其中键入或复制粘贴代码。
Python 深度学习需要帮助吗?
参加我的免费为期两周的电子邮件课程,发现 MLP、CNN 和 LSTM(附代码)。
立即点击注册,还将免费获得本课程的 PDF 电子书版本。
1. 加载数据
第一步是定义您打算在此教程中使用的函数和类。
您将使用 NumPy 库加载数据集,并使用 Keras 库中的两个类来定义模型。
下面列出了所需的导入。
1 2 3 4 5 |
# 使用 Keras 教程的第一个神经网络 从 numpy 导入 loadtxt from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense ... |
现在我们可以加载我们的数据集了。
在本 Keras 教程中,您将使用 Pima 印第安人糖尿病发病数据集。这是来自 UCI 机器学习仓库的标准机器学习数据集。它描述了 Pima 印第安人的患者病历数据以及他们是否在五年内出现糖尿病发作。
因此,这是一个二元分类问题(糖尿病发作记为 1,未发作记为 0)。描述每位患者的所有输入变量都是数值型的。这使得它可以直接与需要数值输入和输出值的神经网络一起使用,并且是我们第一个 Keras 神经网络的理想选择。
数据集可在此处获取:
下载数据集并将其放在您的本地工作目录中,与您的 Python 文件相同的位置。
将其保存为文件名:
1 |
pima-indians-diabetes.csv |
查看文件内容,您应该会看到类似以下内容的数据行:
1 2 3 4 5 6 |
6,148,72,35,0,33.6,0.627,50,1 1,85,66,29,0,26.6,0.351,31,0 8,183,64,0,0,23.3,0.672,32,1 1,89,66,23,94,28.1,0.167,21,0 0,137,40,35,168,43.1,2.288,33,1 ... |
现在您可以使用 NumPy 函数 loadtxt() 将文件加载为数字矩阵。
有八个输入变量和一个输出变量(最后一列)。您将学习一个模型来将输入变量(X)的行映射到输出变量(y),这通常概括为*y = f(X)*。
变量可总结如下:
输入变量(X)
- 怀孕次数
- 口服葡萄糖耐量测试 2 小时血浆葡萄糖浓度
- 舒张压(毫米汞柱)
- 肱三头肌皮褶厚度(毫米)
- 2 小时血清胰岛素(微单位/毫升)
- 体重指数(体重 kg / (身高 m)^2)
- 糖尿病遗传函数
- 年龄(岁)
输出变量(y)
- 类别变量(0 或 1)
CSV 文件加载到内存后,您可以将数据列拆分为输入变量和输出变量。
数据将存储在二维数组中,其中第一个维度是行,第二个维度是列,例如:[行, 列]。
您可以使用标准的 NumPy 切片运算符或“:”来选择列的子集,将数组拆分为两个数组。您可以通过切片 0:8 选择从索引 0 到索引 7 的前八列。然后,您可以通过索引 8 选择输出列(第九个变量)。
1 2 3 4 5 6 7 |
... # 加载数据集 dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',') # 分割为输入 (X) 和输出 (y) 变量 X = dataset[:,0:8] y = dataset[:,8] ... |
现在您已准备好定义您的神经网络模型。
注意: 数据集有九列,范围 0:8 将选择从 0 到 7 的列,在索引 8 处停止。如果您对此不熟悉,可以在这篇帖子中了解更多关于数组切片和范围的知识。
2. 定义 Keras 模型
Keras 中的模型定义为一系列层。
我们创建一个*Sequential 模型*,并逐一添加层,直到我们对网络架构满意为止。
首先要确保输入层具有正确的输入特征数。这可以在创建第一层时通过 input_shape 参数指定,并将其设置为 (8,)
,表示将八个输入变量作为向量输入。
我们如何知道层的数量和类型?
这是一个棘手的问题。有一些启发式方法供您使用,而且通常最佳的网络结构是通过反复试验找到的(我在这里解释得更详细)。通常,您需要一个足够大的网络来捕捉问题的结构。
在此示例中,让我们使用一个具有三层的全连接网络结构。
全连接层使用 Dense 类定义。您可以将层中的神经元或节点数量指定为第一个参数,并使用 activation 参数指定激活函数。
此外,您将在前两层使用*整流线性单元激活函数*,在输出层使用 Sigmoid 函数。
过去,Sigmoid 和 Tanh 激活函数是所有层的首选。如今,使用 ReLU 激活函数可以获得更好的性能。在输出层使用 sigmoid 可以确保您的网络输出在 0 到 1 之间,并且可以轻松地映射到类别 1 的概率,或使用默认阈值 0.5 映射到类别 0 或 1 的硬分类。
您可以将它们组合起来,逐一添加层:
- 模型期望输入具有 8 个变量的行(input_shape=(8,) 参数)。
- 第一个隐藏层有 12 个节点,使用 relu 激活函数。
- 第二个隐藏层有 8 个节点,使用 relu 激活函数。
- 输出层有 1 个节点,使用 sigmoid 激活函数。
1 2 3 4 5 6 7 |
... # 定义 Keras 模型 model = Sequential() model.add(Dense(12, input_shape=(8,), activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(1, activation='sigmoid')) ... |
注意: 这里最令人困惑的是,模型输入的形状作为参数设置在第一个隐藏层上。这意味着添加第一个 Dense 层的代码行同时做了两件事:定义输入层(可见层)和第一个隐藏层。
3. 编译 Keras 模型
模型定义完成后,*您可以编译它*。
编译模型在后台使用高效的数值库(所谓的后端),如 Theano 或 TensorFlow。后端会自动选择表示网络以进行训练和进行预测的最佳方式,以在您的硬件(如 CPU、GPU 或分布式系统)上运行。
编译时,您必须指定一些在训练网络时必需的附加属性。请记住,训练网络意味着找到映射数据集中的输入到输出的最佳权重集。
您必须指定用于评估权重集的损失函数、用于搜索网络权重的优化器,以及在训练期间您希望收集和报告的任何可选指标。
在本例中,使用交叉熵作为 loss 参数。此损失适用于二元分类问题,在 Keras 中定义为“**binary_crossentropy**”。您可以在此处了解有关选择损失函数的更多信息:
我们将 optimizer 定义为高效的随机梯度下降算法“**adam**”。这是一种流行的梯度下降版本,因为它会自动调整自身,并在各种问题中都能取得良好的效果。要了解有关随机梯度下降的 Adam 版本的更多信息,请参阅以下帖子:
最后,由于这是一个分类问题,您将通过 metrics 参数收集和报告分类准确率。
1 2 3 4 |
... # 编译 Keras 模型 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) ... |
4. 拟合 Keras 模型
您已经定义了模型并对其进行了编译,为高效计算做好准备。
现在是时候在一些数据上执行模型了。
您可以通过在模型上调用 fit() 函数来训练或拟合模型。
训练过程会经过多个 epoch,每个 epoch 分成若干个 batch。
- Epoch:遍历训练数据集中的所有行一次
- Batch:在 epoch 中,模型在权重更新之前考虑的一个或多个样本
一个 epoch 包含一个或多个 batch,具体取决于选择的 batch 大小,并且模型会训练多个 epoch。有关 epoch 和 batch 之间区别的更多信息,请参阅以下帖子:
您必须使用 epochs 参数指定训练过程将运行的 epoch(迭代)数量。您还必须设置在每个 epoch 中更新模型权重之前考虑的数据集行数,这称为 batch_size,并使用 batch_size 参数设置。
此问题将运行较少数量的 epoch(150 次),并使用相对较小的 batch_size(10)。
这些配置可以通过反复试验来选择。您希望模型训练足够长的时间,以便它能学习到输入数据行到输出分类的良好(或足够好)的映射。模型总会存在一些误差,但对于给定的模型配置,误差量会在某个点趋于平稳。这被称为模型收敛。
1 2 3 4 |
... # 在数据集上拟合 Keras 模型 model.fit(X, y, epochs=150, batch_size=10) ... |
这是在您的 CPU 或 GPU 上进行工作的地方。
此示例不需要 GPU,但如果您有兴趣了解如何以低廉的云端成本在 GPU 硬件上运行大型模型,请参阅以下帖子:
5. 评估 Keras 模型
我们已经在整个数据集上训练了神经网络,现在可以在相同数据集上评估网络的性能。
这只能让您了解您对数据集的建模程度(例如,训练准确率),但无法了解算法在未见过的数据上的表现如何。为简洁起见,这里这样处理,但理想情况下,您可以将数据分成训练集和测试集,用于训练和评估您的模型。
您可以使用 evaluate() 函数在训练数据集上评估您的模型,并将用于训练模型的相同输入和输出传递给它。
这将为每个输入和输出对生成一个预测,并收集分数,包括平均损失和您配置的任何指标,例如准确率。
evaluate() 函数将返回一个包含两个值的列表。第一个是模型在该数据集上的损失,第二个是模型在该数据集上的准确率。您只对报告准确率感兴趣,因此可以忽略损失值。
1 2 3 4 |
... # 评估 Keras 模型 _, accuracy = model.evaluate(X, y) print('Accuracy: %.2f' % (accuracy*100)) |
6. 整合所有内容
您刚刚了解了如何轻松创建您的第一个 Keras 神经网络模型。
让我们将所有内容整合到一个完整的代码示例中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 使用 Keras 教程的第一个神经网络 从 numpy 导入 loadtxt from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # 加载数据集 dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',') # 分割为输入 (X) 和输出 (y) 变量 X = dataset[:,0:8] y = dataset[:,8] # 定义 Keras 模型 model = Sequential() model.add(Dense(12, input_shape=(8,), activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(1, activation='sigmoid')) # 编译 Keras 模型 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 在数据集上拟合 Keras 模型 model.fit(X, y, epochs=150, batch_size=10) # 评估 Keras 模型 _, accuracy = model.evaluate(X, y) print('Accuracy: %.2f' % (accuracy*100)) |
您可以将所有代码复制到您的 Python 文件中,并将其保存为“keras_first_network.py”,放在与数据文件“pima-indians-diabetes.csv”相同的目录中。然后,您可以从命令行(命令提示符)中像这样运行 Python 文件作为一个脚本:
1 |
python keras_first_network.py |
运行此示例,您应该会看到关于 150 个 epoch 的消息,打印出损失和准确率,然后是训练好的模型在训练数据集上的最终评估。
在我的工作站上运行 CPU 版本大约需要 10 秒钟。
理想情况下,您希望损失降至零,准确率升至 1.0(即 100%)。对于任何非平凡的机器学习问题,这都是不可能实现的。相反,您的模型中总会存在一些误差。目标是选择一个模型配置和训练配置,为给定的数据集实现尽可能低的损失和最高的准确率。
1 2 3 4 5 6 7 8 9 10 11 12 |
... 768/768 [==============================] - 0s 63us/step - loss: 0.4817 - acc: 0.7708 第 147 周期/150 768/768 [==============================] - 0s 63us/step - loss: 0.4764 - acc: 0.7747 第 148 周期/150 768/768 [==============================] - 0s 63us/step - loss: 0.4737 - acc: 0.7682 第 149 周期/150 768/768 [==============================] - 0s 64us/step - loss: 0.4730 - acc: 0.7747 第 150 周期/150 768/768 [==============================] - 0s 63us/step - loss: 0.4754 - acc: 0.7799 768/768 [==============================] - 0s 38us/step Accuracy: 76.56 |
注意:如果您尝试在 IPython 或 Jupyter notebook 中运行此示例,可能会遇到错误。
原因是训练期间的输出进度条。您可以轻松地通过在调用 fit() 和 evaluate() 函数时设置 verbose=0 来关闭它们;例如:
1 2 3 4 5 6 |
... # 在数据集上拟合 keras 模型,不显示进度条 model.fit(X, y, epochs=150, batch_size=10, verbose=0) # 评估 Keras 模型 _, accuracy = model.evaluate(X, y, verbose=0) ... |
注意:您的结果可能因算法或评估程序的随机性、或数值精度差异而异。可以尝试运行几次示例并比较平均结果。
你得到了什么分数?
请在下方评论区发布你的结果。
神经网络是随机算法,这意味着相同的算法在相同的数据上每次运行时都可以训练出具有不同技能的模型。这是一个特性,而不是一个 bug。您可以在以下帖子中了解更多信息:
模型性能的差异意味着,为了合理地估算模型性能,您可能需要多次拟合模型并计算准确率分数的平均值。有关评估神经网络的这种方法,请参阅以下帖子:
例如,以下是运行该示例五次的准确率分数:
1 2 3 4 5 |
Accuracy: 75.00 Accuracy: 77.73 Accuracy: 77.60 Accuracy: 78.12 Accuracy: 76.17 |
您可以看到,所有准确率分数都在 77% 左右,平均值为 76.924%。
7. 进行预测
我收到的头号问题是:
“训练完模型后,如何使用它来对新数据进行预测?”
很好的问题。
您可以改编上述示例,并使用它来对训练数据集生成预测,假装它是您未见过的新数据集。
进行预测就像在模型上调用 predict() 函数一样简单。您在输出层使用了 sigmoid 激活函数,因此预测将是 0 到 1 之间的概率。对于此分类任务,您可以轻松地将其转换为清晰的二元预测,方法是进行四舍五入。
例如
1 2 3 4 5 |
... # 使用模型进行概率预测 predictions = model.predict(X) # 四舍五入预测结果 rounded = [round(x[0]) for x in predictions] |
或者,您可以将概率转换为 0 或 1,直接预测清晰的类别;例如:
1 2 3 |
... # 使用模型进行类别预测 predictions = (model.predict(X) > 0.5).astype(int) |
下面的完整示例对数据集中的每个示例进行预测,然后打印前五个示例的输入数据、预测类别和期望类别。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# 使用 keras 进行第一个神经网络预测 从 numpy 导入 loadtxt from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # 加载数据集 dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',') # 分割为输入 (X) 和输出 (y) 变量 X = dataset[:,0:8] y = dataset[:,8] # 定义 Keras 模型 model = Sequential() model.add(Dense(12, input_shape=(8,), activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(1, activation='sigmoid')) # 编译 Keras 模型 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 在数据集上拟合 Keras 模型 model.fit(X, y, epochs=150, batch_size=10, verbose=0) # 使用模型进行类别预测 predictions = (model.predict(X) > 0.5).astype(int) # 总结前 5 个案例 for i in range(5): print('%s => %d (expected %d)' % (X[i].tolist(), predictions[i], y[i])) |
运行示例时不会显示进度条,因为 verbose 参数已设置为 0。
拟合模型后,会为数据集中的所有示例进行预测,并打印前五个示例的输入行和预测类别值,并与期望的类别值进行比较。
您可以看到大多数行都得到了正确预测。事实上,根据上一节对模型性能的估算,您可以预期约 76.9% 的行得到正确预测。
1 2 3 4 5 |
[6.0, 148.0, 72.0, 35.0, 0.0, 33.6, 0.627, 50.0] => 0 (expected 1) [1.0, 85.0, 66.0, 29.0, 0.0, 26.6, 0.351, 31.0] => 0 (expected 0) [8.0, 183.0, 64.0, 0.0, 0.0, 23.3, 0.672, 32.0] => 1 (expected 1) [1.0, 89.0, 66.0, 23.0, 94.0, 28.1, 0.167, 21.0] => 0 (expected 0) [0.0, 137.0, 40.0, 35.0, 168.0, 43.1, 2.288, 33.0] => 1 (expected 1) |
如果您想了解更多关于如何使用 Keras 模型进行预测的信息,请参阅以下帖子:
Keras 教程总结
在这篇文章中,您了解了如何使用强大的 Keras Python 深度学习库创建您的第一个神经网络模型。
具体来说,您学习了使用 Keras 创建神经网络或深度学习模型的六个关键步骤,包括:
- 如何加载数据
- 如何在 Keras 中定义神经网络
- 如何使用高效的数值后端编译 Keras 模型
- 如何训练模型
- 如何评估模型
- 如何使用模型进行预测
您对 Keras 或本教程有任何疑问吗?
请在评论中提问,我将尽力回答。
Keras 教程扩展
做得好,您已成功使用 Keras 深度学习库在 Python 中开发了您的第一个神经网络。
本节提供了一些您可能想探索的教程扩展。
- 调优模型。 更改模型或训练过程的配置,看看是否能提高模型性能,例如,达到高于 76% 的准确率。
- 保存模型。将教程更新为将模型保存到文件,然后稍后加载它并使用它进行预测(参见本教程)。
- 总结模型。更新教程以总结模型并创建模型层的图(参见本教程)。
- 分离训练和测试数据集。将加载的数据集分为训练集和测试集(基于行分割),然后使用一个集合来训练模型,另一个集合来估算模型在新数据上的性能。
- 绘制学习曲线。fit() 函数返回一个历史对象,总结了每个 epoch 结束时的损失和准确率。将这些数据绘制成折线图,称为学习曲线(参见本教程)。
- 学习新数据集。更新教程以使用不同的表格数据集,可能来自UCI 机器学习仓库。
- 使用函数式 API。更新教程以使用 Keras 函数式 API 来定义模型(参见本教程)。
进一步阅读
您是否正在寻找更多使用 Python 和 Keras 的深度学习教程?
可以看看这些:
相关教程
- Keras 中神经网络模型的 5 步生命周期
- 使用 Keras 深度学习库进行多类别分类教程
- 使用 Python 中 Keras 深度学习库的回归教程
- 如何在 Python 中使用 Keras 对深度学习模型进行超参数网格搜索
书籍
- Deep Learning(教科书),2016 年。
- Deep Learning with Python(我的书)。
API
您做得怎么样?您对深度学习有任何疑问吗?
请在下面的评论中提问,我会尽力提供帮助。
输入层没有激活函数,但模型的第一层仍然提到了 activation="relu"。为什么?
嗨 Saurav,
这里网络中的第一层严格来说是隐藏层,因此它有一个激活函数。
但你为什么把它设为隐藏层呢?输入层通常不表示为隐藏层,对吗?
你好 Sam,
请注意这行代码:
它做了几件事。
这有帮助吗?
嗨,Jason,
你使用了两个不同的激活函数,那么我们如何知道哪个激活函数适合模型呢?
抱歉,我不明白你的问题。
嗨,Jason,
我对深度学习和机器学习很感兴趣。你提到“它定义了一个具有 12 个神经元的隐藏层,该层连接到使用 relu 激活函数的输入层。” 我想知道如何确定神经元的数量以实现模型的高准确率?
非常感谢!!!
通过试错法。我们无法通过解析来指定“最佳”神经元数量。我们必须进行测试。
先生,感谢您的教程。您是否愿意做一个关于通过神经网络模型进行股票数据预测以及在任何股票数据上训练的教程?如果您有这方面的教程,请分享链接。谢谢!
鉴于证券价格的随机游走假设,我不太愿意发布关于股票市场预测的教程。
https://machinelearning.org.cn/gentle-introduction-random-walk-times-series-forecasting-python/
你好,
我想更多地了解激活函数。它是如何工作的?有多少种激活函数?使用不同的激活函数会对模型的输出产生多大的影响?
我还想了解隐藏层。隐藏层的大小如何影响模型?
在本教程中,我们在隐藏层中使用 relu,在此处了解更多信息。
https://machinelearning.org.cn/rectified-linear-activation-function-for-deep-learning-neural-networks/
层的大小会影响模型的容量,在此处了解更多信息。
https://machinelearning.org.cn/how-to-control-neural-network-model-capacity-with-nodes-and-layers/
>
model.add(Dense(12, input_shape = (8,), activation = 'relu'))
为什么输入层有 12 个神经元,而只有 8 个输入变量?输入层不应该有与变量数量相同的神经元,以便每个输入进入一个神经元吗?我有什么误解吗?
你好,如何使用 cnn 对 mhd 图像进行像素分类?
什么是像素分类?什么是 mhd 图像?
您是在谈论神经风格迁移吗?
你好 Seth…这是一个重要的话题。更多内容可以在这里找到
https://towardsdatascience.com/implementing-neural-style-transfer-using-pytorch-fd8d43fb7bfa
你好!我想知道是否有办法在每次更新后知道所有权值的值?
是的,您可以将它们保存到文件或手动查看。
通常保存是通过检查点实现的。
https://machinelearning.org.cn/check-point-deep-learning-models-keras/
runfile(‘C:/Users/Owner/Documents/untitled1.py’, wdir=’C:/Users/Owner/Documents’)
回溯(最近一次调用)
File “”, line 1, in
runfile(‘C:/Users/Owner/Documents/untitled1.py’, wdir=’C:/Users/Owner/Documents’)
File “C:\Users\Owner\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”, line 705, in runfile
execfile(filename, namespace)
File “C:\Users\Owner\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”, line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File “C:/Users/Owner/Documents/untitled1.py”, line 13, in
model.add(Dense(12, input_dim=8, activation=’relu’))
File “C:\Users\Owner\Anaconda3\lib\site-packages\keras\engine\sequential.py”, line 160, in add
name=layer.name + ‘_input’)
File “C:\Users\Owner\Anaconda3\lib\site-packages\keras\engine\input_layer.py”, line 177, in Input
input_tensor=tensor)
File “C:\Users\Owner\Anaconda3\lib\site-packages\keras\legacy\interfaces.py”, line 91, in wrapper
return func(*args, **kwargs)
File “C:\Users\Owner\Anaconda3\lib\site-packages\keras\engine\input_layer.py”, line 86, in __init__
name=self.name)
File “C:\Users\Owner\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py”, line 515, in placeholder
x = tf.placeholder(dtype, shape=shape, name=name)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\array_ops.py”, line 1530, in placeholder
return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\gen_array_ops.py”, line 1954, in _placeholder
name=name)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\op_def_library.py”, line 767, in apply_op
op_def=op_def)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py”, line 2508, in create_op
set_shapes_for_outputs(ret)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py”, line 1894, in set_shapes_for_outputs
output.set_shape(s)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py”, line 443, in set_shape
self._shape = self._shape.merge_with(shape)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\tensor_shape.py”, line 550, in merge_with
stop = key.stop
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\tensor_shape.py”, line 798, in as_shape
“””Returns this shape as a
TensorShapeProto
.”””File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\tensor_shape.py”, line 431, in __init__
size for one or more dimension. e.g.
TensorShape([None, 256])
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\tensor_shape.py”, line 376, in as_dimension
other = as_dimension(other)
File “C:\Users\Owner\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\tensor_shape.py”, line 32, in __init__
if value is None
TypeError: int() argument must be a string, a bytes-like object or a number, not ‘TensorShapeProto’
运行此命令时出现此错误 {model.add(Dense(12, input_dim=8, activation=’relu’))}
有什么帮助吗?
将所有代码保存到一个文件中,然后按如下方式运行:
https://machinelearning.org.cn/faq/single-faq/how-do-i-run-a-script-from-the-command-line
很棒的教程。解释简单而精确。非常感谢!
谢谢!
很棒的艺术家
你能解释一下如何将权重正则化实现到层中吗?
是的,请看这里。
https://keras.org.cn/regularizers/
嘿,你好!你如何开始用 python 编码?
从这里开始
https://machinelearning.org.cn/faq/single-faq/how-do-i-get-started-with-python-programming
导入语句,以防其他人需要
来自 keras.models import Sequential
from keras.layers import Dense, Activation
谢谢。
我已经在第 6 部分提供了这些,但我也已将它们添加到第 1 部分。
好文章!
是否可以训练一个神经网络,该网络接收向量 x 作为输入并尝试预测另一个向量 y,其中 x 和 y 都是浮点数?
是的,这称为回归。
https://machinelearning.org.cn/regression-tutorial-keras-deep-learning-library-python/
如果第一层有 8 个输入,那么为什么我们在下一行中将其取为“12”?
model.add(Dense(12, input_dim=8, init=’uniform’, activation=’relu’))
你好 Aakash。
输入层由 input_dim 参数定义,此处设置为 8。
第一个隐藏层有 12 个神经元。
我运行了你的程序,但遇到了一个错误。
ValueError: 无法将字符串转换为浮点数
这是什么原因,我该如何解决?
谢谢。
顺便说一句,这是一篇很棒的文章。
可能是复制粘贴错误。也许可以尝试复制并运行第 6 部分中列出的整个示例?
sir,我遇到了同样的问题 ValueError: could not convert string to float: ‘”6’
我也在运行第 6 部分的示例。
我在这里有一些建议
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
Jason,你能否帮我解决如何编码的问题?
抱歉,我无法帮助你编写代码。
也许当你将所有参数设置在 *.csv 文件中的额外列中时。然后你应该将分隔符从 , 替换为 ;,例如
dataset = numpy.loadtxt(“pima-indians-diabetes.csv”, delimiter=”;”)
这为我解决了问题。
感谢分享。
感谢您提供简单实用的示例。
不客气,cheikh。
你好 Sir,我正尝试使用 Keras 进行 NLP,特别是句子分类。我已将模型构建部分放在下面。它需要很长时间才能执行。我正在使用 Pycharm IDE。
batch_size = 32
nb_filter = 250
filter_length = 3
nb_epoch = 2
pool_length = 2
output_dim = 5
hidden_dims = 250
# 构建模型
model1 = Sequential()
model1.add(Convolution1D(nb_filter, filter_length ,activation=’relu’,border_mode=’valid’,
input_shape=(len(embb_weights),dim), weights=[embb_weights]))
model1.add(Dense(hidden_dims))
model1.add(Dropout(0.2))
model1.add(Activation(‘relu’))
model1.add(MaxPooling1D(pool_length=pool_length))
model1.add(Dense(output_dim, activation=’sigmoid’))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model1.compile(loss=’mean_squared_error’,
optimizer=sgd,
metrics=['accuracy'])
你可能需要一个更大的网络。你也可以使用标准的重复结构,如 CNN->CNN->Pool->Dense。
参见这篇关于使用 CNN 的帖子。
使用卷积神经网络和 Python Keras 进行手写数字识别
稍后,您可能还想尝试堆叠的 LSTM。
嗨 Jason,感谢你提供的精彩示例。鉴于该模型的准确率为 79.56%。从这里开始,你会采取哪些步骤来提高准确率?
鉴于我对机器学习的初步了解,我的初步方法将是:
实现前向传播,然后计算成本函数,然后实现反向传播,使用梯度检查来评估我的网络(使用后禁用),然后使用梯度下降。
但是,与使用 Keras 相比,这种方法似乎很艰苦。感谢您的回复。
你好 Andre,确实 Keras 让处理神经网络变得容易多了。甚至很有趣!
我们可能在这类问题上达到了上限,但这里有一些提高性能的一般性建议。
– 数据准备 – 尝试从不同角度看待问题,看看哪种最能暴露问题结构给学习算法(数据转换、特征工程等)。
– 算法选择 – 尝试多种算法,看看哪种或哪几种在问题上表现最好(在所有视图上都尝试)。
– 算法调优 – 精细调整表现良好的算法以充分发挥其潜力(网格搜索或随机搜索超参数调优)。
– 集成 – 组合多个算法的预测(堆叠、提升、装袋等)。
对于神经网络,有很多可以调整的地方,我认为尝试不同的网络拓扑结构(层和每层的神经元数量)以及训练周期和学习率(更大的网络需要更多的训练)会带来很大的收益。
希望这些能作为一个开始有所帮助。
太棒了!谢谢 Jason =)
不客气,Andre。
这里有一些有趣的东西。
https://youtu.be/vq2nnJ4g6N0
感谢分享。你喜欢它哪一点?
嗨 Jason,这是一个很好的例子,但如果有人在 IPython/Jupyter notebook 中运行它,他们很可能会在运行 fit 步骤时遇到 I/O 错误。这是由于 IPython 中存在一个已知的错误。
解决方法是将 verbose=0 设置为如下:
# 拟合模型
model.fit(X, Y, nb_epoch=40, batch_size=10, verbose=0)
太好了,谢谢分享,Romilly。
很棒的例子。不过有一个查询。我现在如何输入一个输入并获得输出(0 或 1)?您能否提供相应的命令?
谢谢
您可以调用 model.predict() 来获取预测,然后对每个值进行四舍五入以将其转换为二进制值。
例如,下面是一个完整的示例,展示了如何四舍五入预测值并将其打印到控制台。
你好,为什么你不使用任何测试集?我认为你正在从训练集中进行预测。
没错,这只是一个帮助你开始使用 Keras 的示例。
Jason,我不太明白预测值([1.0, 0.0, 1.0, 0.0, 1.0,……)如何映射到现实世界的问题。例如,结果中的第一个“1.0”表示什么?
我知道这是对糖尿病的“真实”预测——但这是对列表中的第一位患者的预测吗?那么第二个结果“0.0”是第二位患者/数据集行中的预测吗?
请记住,原始文件在最后一列(类)中具有 0 和 1 值,其中 0 表示未发作糖尿病,1 表示已发作糖尿病。
我们正在预测这一列中的新值。
我们为特定行进行预测,传入他们的医疗信息并预测糖尿病的发作。我们碰巧一次性为多行执行此操作。
你好 jason
在计算预测时我遇到了这个错误。
#calculate predictions
predictions = model.predict(X)
#round predictions
rounded = [round(x) for x in predictions]
print(rounded)
—————————————————————————
TypeError Traceback (most recent call last)
in ()
2 predictions = model.predict(X)
3 #round predictions
—-> 4 rounded = [round(x) for x in predictions]
5 print(rounded)
在 (.0)
2 predictions = model.predict(X)
3 #round predictions
—-> 4 rounded = [round(x) for x in predictions]
5 print(rounded)
TypeError: type numpy.ndarray doesn’t define __round__ method
尝试删除 round() 调用。
嗨,Jason,
我可以问一下你为什么使用与模型相同的 X 数据来进行预测吗?
# 拟合模型
model.fit(X, Y, epochs = 150, batch_size = 10, verbose = 2)
# 计算预测值
predictions = model.predict(X)
Rachel
这是我手头的所有东西。X 表示数据矩阵。
在 predict() 中用 Xprime 或你喜欢的任何东西替换 X。
嗨,我该如何输入(8,125,96,0,0,0.0,0.232,54)来获得我们的输出?
predictions = model.predict(X)
我的意思是,我想在 input_dim=8 的地方获得输出 8,125,96,0,0,0.0,0.232,54。
将你的输入包装在一个数组中,n 列带有一行,然后将其传递给模型。
这有帮助吗?
你好,我尝试在类似的神经网络上使用预测,但一直收到输入维度形状不同的错误。
您能否举例说明示例神经网络上的数组应该是什么样子?
对于 MLP,数据必须组织成样本 x 特征的二维数组。
我无法到达最后一个 epoch。之前出现了错误。
Epoch 11/150
390/768 [==============>……………]Traceback (most recent call last):.6921
ValueError: I/O operation on closed file
通过调整 epoch 和 batch size,我解决了这个问题。
现在,为了预测一个未知值,我加载了一个新的数据集并使用了下面的 predict 命令。
dataset_test = numpy.loadtxt(“pima-indians-diabetes_test.csv”,delimiter=”,”) – 只有一个行
X = dataset_test[:,0:8]
model.predict(X)
但我遇到了错误。
X = dataset_test[:,0:8]
IndexError: 数组索引过多
您能帮忙吗?
谢谢
当我从笔记本电脑或 IDE 运行时,我看到了类似这样的问题。
考虑从控制台运行示例以确保它们正常工作。
考虑关闭详细输出(fit() 调用中的 verbose=0)以禁用进度条。
嗨,Jason!
很喜欢这个教程!不过我有一个问题。
有没有办法在模型训练后将权重保存到文件中,以便在 kaggle 等地方使用?
谢谢,
大卫
谢谢 David。
您可以通过调用 model.save_weights(“model.h5”) 将网络权重保存到文件。
你可以在这篇帖子中了解更多信息
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
嘿,Jason!感谢您提供的精彩教程!我使用您的教程学习了CNN。我有一个问题想请教您……假设我想用Keras对图像进行分类,并且我有3个或更多类别需要分类,我的算法如何知道这些类别呢?你知道,我需要编写代码来定义什么是猫、狗和马。有没有办法编写这个?我尝试了
target_names = [‘类别 0(猫)’, ‘类别 1(狗)’, ‘类别 2(马)’]
print(classification_report(np.argmax(Y_test,axis=1), y_pred,target_names=target_names))
但是我的结果没有正确分类。
精确率 召回率 f1分数 支持数
类别 0(猫) 0.00 0.00 0.00 17
类别 1(狗) 0.00 0.00 0.00 14
类别 2(马) 0.99 1.00 0.99 2526
平均/总计 0.98 0.99 0.98 2557
Alex,问得好。
这是一个多类别分类问题的例子。你必须对输出变量进行独热编码(one hot encoding),才能用神经网络进行建模,并将类的数量指定为网络最后一层的输出数量。
我提供了一个关于著名的鸢尾花数据集的教程,该数据集有3个输出类别,链接在此。
https://machinelearning.org.cn/multi-class-classification-tutorial-keras-deep-learning-library/
谢谢你。
我会去看看的。
没问题,Alex。
这真的很有用,谢谢。
我正在使用Keras(带有CNN)对文档进行情感分类,并且我想提高性能,但在以非任意方式调整参数方面我完全不知所措。您能否指导我一些能帮助我以更系统的方式进行的方法?肯定有一些启发式规则或经验法则可以指导我。
我有一个教程很快就要发布了(下周),其中提供了大量关于调整Keras中神经网络超参数的例子,但仅限于MLP。
对于CNN,我建议调整重复层(卷积+最大池化)的数量、重复块中的滤波器数量,以及网络预测部分中密集层的数量和大小。还可以考虑使用预训练模型中的一些固定层作为网络起点(例如VGG),然后尝试仅围绕它们训练输入和输出层来解决您的问题。
希望这些能作为一个开始有所帮助。
Jason你好,我的准确率是:0.0104,而您的准确率是0.7879,我的损失是:-9.5414。数据集有问题吗?我从不同的网站下载了数据集。
我认为您的实现或数据集可能存在问题。您的数字差得很远。
训练后,如何将训练好的模型用于新样本?
你可以调用 model.predict()
请参见上面的评论,其中有具体的代码示例。
嗨,Jason,
我是一名学生,正在研究如何使用人工神经网络来预测潜在软件项目的商业可行性。
我打算使用Python作为编程语言。ANN的应用令我着迷,但我对机器学习和Python都很陌生。您能建议我如何着手吗?
非常感谢
首先,掌握如何在Python中端到端地完成一个机器学习问题。
这是一个很好的入门教程。
https://machinelearning.org.cn/machine-learning-in-python-step-by-step/
亲爱的Jeson,这是一个非常适合初学者的教程。它能满足许多学生寻求初步帮助的需求。但我有一个问题。您能否阐明几件事情:i)如何使用测试数据集测试训练好的模型(即加载测试数据集并应用模型,假设测试文件名是test.csv);ii)打印出在测试数据集上获得的准确率;iii)输出有多个类别(假设是4类别分类问题)。
请提供完整的程序以消除任何困惑。
非常感谢。
我在评论中提供了示例,您也可以在此帖子中了解如何在新数据上进行预测。
https://machinelearning.org.cn/5-step-life-cycle-neural-network-models-keras/
有关多类别分类的示例,您可以查看此教程。
https://machinelearning.org.cn/multi-class-classification-tutorial-keras-deep-learning-library/
我正在尝试构建一个具有一些递归连接的神经网络,但不是一个完全的递归层,如何在Keras中做到这一点?
我可以打印出网络的图表,但我的基本目标是让当前时间帧中的每个神经元只知道其自身的先前输出,而不是输出层中所有神经元的输出。
Doron,我暂时不知道。
感谢您的回复,祝您有美好的一天。
你好 Jason,
这是一个很棒的教程。感谢分享。
我有一个包含100个指纹的数据集,我想使用Python(Keras)提取这100个指纹的细节。您能建议我从哪里开始吗?我真的很困惑。
如果您的指纹是图像,您可能需要考虑使用卷积神经网络(CNN),它们在处理图像数据方面效果更好。
请查看此数字识别教程作为开始。
使用卷积神经网络和 Python Keras 进行手写数字识别
嗨 Jason
感谢这个很棒的教程,我是机器学习的新手,我看完了您关于Keras的基础教程和手写数字识别的教程。我想了解如何训练一组图像数据,例如,图像数据可以是一些形状,如正方形、圆形、金字塔。
请告诉我输入数据如何喂给程序,以及如何导出模型。
首先准备高质量的数据集。
嗨,Jason,
感谢这篇很棒的文章。但我有一个疑问。
Keras中是否有任何内置函数可以提供ANN模型的特征重要性?
如果没有,您能否建议一种技术,我可以使用它从损失函数中提取变量重要性?我正在考虑一种类似于RF中使用的技术,该技术通过排列选定变量的值并计算损失的相对增加来工作。
此致,
CM
CM,我不相信有。
我建议使用包装器方法(wrapper method),并评估特征子集来生成特征重要性/特征选择报告。
在这篇文章中我详细介绍了特征选择。
https://machinelearning.org.cn/an-introduction-to-feature-selection/
在这里我提供了一个在scikit-learn中进行特征选择的示例。
https://machinelearning.org.cn/feature-selection-machine-learning-python/
希望这些能作为一个开始有所帮助。
您是否为此方法开发了任何进展?我也遇到了同样的问题。
Jason您好,我是深度学习的新手。作为一个新手,我问您一个可能显得愚蠢的技术性问题。我的问题是:在使用深度神经网络对句子进行分类时(例如,输出是+ve句子和-ve句子),我们是否可以使用句子的特征(例如句子长度等)?
Kamal,问得好,是的,你可以。我鼓励你包含所有这些特征,看看哪些能提高性能。
你好,我如何在一个有多个输出的数据集上使用它?例如,一个数据集输出A和B,其中A可以是0或1,B可以是3或4?
您可以在输出层中使用两个神经元,并将输出变量都归一化到0到1的范围内。
这个关于多类别分类的教程可能会给您一些想法。
https://machinelearning.org.cn/multi-class-classification-tutorial-keras-deep-learning-library/
嗨,Jason,
教程看起来非常好,但不幸的是,在从keras.layers导入Dense时我一直收到一个错误,我收到的错误是:AttributeError: module ‘theano’ has no attribute ‘gof’
我尝试重新安装Theano,但问题没有解决。
祝好
汤姆
Tom,很抱歉听到这个消息。我以前从未见过这个问题。
您搜索过Google吗?我可以看到一些帖子,这可能与您的scipy版本或其他类似软件有关。
告诉我进展如何。
嗨,Jason,
您能否做一个关于如何将额外训练数据添加到已训练模型中的教程?这将对更大的数据集有所帮助。我读过暖启动(warm start)用于随机森林。但不确定如何作为算法实现。实现它的通用版本会很好。谢谢!
Shudhan,问得好!
是的,您可以保存您的权重,稍后将它们加载到新的网络拓扑中,然后开始用新数据进行训练。
如果时间允许,我将在接下来的几周内找出示例。
嗨,Jason,
首先,恭喜您完成了如此出色的工作!
我的问题是
如果我的.csv文件还包含名义属性和数值属性,该怎么办?
我应该将我的名义值转换为数值吗?
提前感谢你
Joanna,是的。
您可以使用标签编码器将名义值转换为整数,然后甚至可以将整数转换为独热编码。
这篇帖子将为您提供可用的代码。
https://machinelearning.org.cn/data-preparation-gradient-boosting-xgboost-python/
一个小bug:-
第25行:rounded = [round(x) for x in predictions]
应该改为numpy.round,代码才能运行!
尽管如此,教程还是非常棒的。这是我在Python中学习ANN入门所见过的最好的教程。谢谢!
也许是您的Python版本或环境的问题?
在Python 2.7中,round()函数是内置的。
如果有Python3的评论会更好。
#如果使用python3,请改用unmpy.round。
感谢您的提示,AC。
这个很容易理解!很棒的文章!我们如何在Keras中执行dropout?
谢谢Ash。
您可以在这里学习Keras的dropout。
https://machinelearning.org.cn/dropout-regularization-deep-learning-models-keras/
你好 Jason,
您最后使用了model.predict来预测结果。是否可以将模型保存在硬盘上的某个位置,然后将其转移到另一台机器(例如我使用的ROS上的turtlebot)上,然后在turtlebot上直接使用该模型进行预测?
请告诉我怎么做。
谢谢你
Homagni Saha
Homagni,问得好。
当然!
在这篇我写的教程中,您将确切地了解如何做到这一点。
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
嗨,Jason,
我首先实现了您的代码。但我的准确率只有45.18%,参数和一切都相同。
我弄不明白为什么。
谢谢
Rimi,这确实听起来像个问题。
请确认代码和数据完全匹配。
嗨,Jason,
我对第一层参数有点困惑。您说第一层有12个神经元,并期望8个输入变量。
为什么第一层的神经元数量和输入维度不同?
此致,
Ankit
Ankit,您好。
问题有8个输入变量,第一个隐藏层有12个神经元。输入是数据的列,这是固定的。隐藏层通常是我们根据我们认为表示问题复杂度所需的能力而设计的。在这种情况下,我们为第一个隐藏层选择了12个神经元。
希望这样更清楚。
你好,
我有一些数据,类似于鸢尾花数据,但有更多的列。
我想使用MLP和DBN/CNNClassifier(或其他深度学习分类算法)来处理我的数据,看看它能正确地将数据分为6组。
以前用的是J的深度学习,今天是第一次看到KERAS。
KERAS是否有DL分类算法的示例(代码示例)?
拜托,
汤姆
是的Tom,这篇帖子中的示例是一个神经网络(深度学习)应用于分类问题的示例。
我已经安装了theano,但它给我tensorflow的错误。必须同时安装这两个包吗?因为tensorflow不支持Windows。在Windows上获取它的唯一方法是安装虚拟机。
Keras与Theano一起运行效果很好。
只需安装Theano,并将Keras配置为使用Theano后端。
更多关于配置Keras后端的信息在此。
https://machinelearning.org.cn/introduction-python-deep-learning-library-keras/
嘿Jason,我运行了你的代码但得到了以下错误。尽管我已经安装了theano后端。请帮帮我。我卡住了。
使用 TensorFlow 后端。
回溯(最近一次调用)
File “C:\Users\pc\Desktop\first.py”, line 2, in
来自 keras.models import Sequential
File “C:\Users\pc\Anaconda3\lib\site-packages\keras\__init__.py”, line 2, in
from . import backend
File “C:\Users\pc\Anaconda3\lib\site-packages\keras\backend\__init__.py”, line 64, in
from .tensorflow_backend import *
File “C:\Users\pc\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py”, line 1, in
import tensorflow as tf
ImportError: No module named ‘tensorflow’
>>>
将Keras使用的后端从TensorFlow更改为Theano。
您可以通过使用命令行开关或更改Keras配置文件来做到这一点。
请参阅我在上一篇文章中发布的链接获取说明。
Rumesa你好!
您解决问题了吗?我遇到了同样的问题。到处都是关于keras.json文件或环境变量的相同答案,但它不起作用。您能告诉我什么对您有效吗?
有意思。
也许最新版本与tensorflow的紧密耦合存在问题?我没遇到过这个问题。
或许可以尝试测试Keras的先前版本,例如1.1.0?
试试这个
嗨,Jason,
首先,非常感谢您创建这些资源,我一直在关注您的邮件通讯,现在我终于有空自己学习更多关于它的知识了,所以您的工作非常感激。
我的问题是:如何设置/获取每个隐藏节点的权重?
我计划创建几个随机权重数组,然后使用遗传算法来查看哪个权重数组表现最好,并在几代中进行改进。最好的方法是什么?如果我使用“relu”激活函数,我是否认为这些随机生成的权重应该在0到0.05之间?
非常感谢您的帮助:)
Alexon
Alexon,谢谢。
您可以从网络中获取和设置权重。
您可以在此处了解有关如何在此环境中进行操作的更多信息,例如将权重保存到文件。
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
我希望这对您有所帮助,我很想听听您的进展。
太好了,谢谢您指明方向。
我很乐意告诉您进展如何,但这可能需要一些时间,因为这在工作之间是我非常“有时间的时候才做”的项目:)
祝好!
很好的介绍,谢谢!
很高兴您觉得它有用,Arnaldo。
您好
我有一个问题,如何将一个字符表示为一个向量,该向量可以作为神经网络的输入来预测单词的含义,并使用LSTM进行训练?
例如,我有“bf”来预测“boyfriend”或“best friend”,同样地,我有“2mor”来预测“tomorrow”。我需要将所有输入编码为字符表示的向量,以便用RNN/LSTM进行训练来预测输出。
谢谢你。
诚挚的问候
Abbey,您好,您可以将字符映射到整数来获得整数向量。
Jason,谢谢。如果我将英文字母、数字和特殊字符映射到整数值来获得向量。
问题是LSTM如何预测字符?请详细举例说明。
此致
Abbey,您好。
如果您的输出值也是字符,您可以将它们映射到整数,然后反向映射将预测转换回文本。
字符编码的输出值将是文本
谢谢你,Jason,如果我将字符映射到整数值,使用英文字母、数字和特殊字符来获取非正式文本的向量表示
问题是 LSTM 如何预测与输入值含义相近的字符或单词。请为我提供更详细的示例。我根据你的教程示例理解 RNN/LSTM 的工作原理,但我正在为设计处理的逻辑而烦恼。
此致
嗨,Jason,
我正在尝试在我的数据上实现一维 CNN。所以,我构建了我的网络。
问题是
def train_model(model, X_train, y_train, X_test, y_test)
X_train = X_train.reshape(-1, 1, 41)
X_test = X_test.reshape(-1, 1, 41)
numpy.random.seed(seed)
model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=100, batch_size=64)
# 模型的最终评估
scores = model.evaluate(X_test, y_test, verbose=0)
print(“Accuracy: %.2f%%” % (scores[1] * 100))
上面的这个方法不起作用,也没有给我任何错误消息。
你能帮帮我吗?
你好 Ammar,我很惊讶竟然没有错误消息。
也许可以从命令行运行并添加一些 print() 语句,看看具体在哪里停止。
嗨 Jason
工作很棒。我还有另一个疑问。如何将其应用于文本挖掘。我有一个包含评论文档和标签的 csv 文件。我想根据可用的文本对文档进行分类。你能帮我这个忙吗?
我建议将字符转换为整数,然后使用 Embedding 层。
Jason 先生,这是一个很棒的教程,但我遇到了一些错误。
首先,我无法正确加载数据集,尝试纠正错误但未能成功。(FileNotFoundError: [Errno 2] No such file or directory: ‘pima-indians-diabetes.csv’)。
其次:在尝试评估模型时,它说(X 未定义)也许是因为上传失败了。
谢谢!
Alex,你需要下载文件并将其放在你当前的目录中。
这有帮助吗?
先生,现在成功了……
谢谢!
很高兴听到这个消息,Alex。
嗨,Jason,
首先,非常感谢您提供如此出色的教程。我对机器学习非常陌生,坦白说我没有数据科学背景。机器学习的概念让我不知所措,现在我渴望成为这个领域的专家。我需要您从零开始的建议。另外,我是一名计算机工程(计算机硬件)的博士生,我想将其作为工具应用于 IC 的故障检测和测试。您能否为我提供该领域的参考文献?
你好 Bappaditya,
我最好的入门建议在这里:
https://machinelearning.org.cn/start-here/#getstarted
我相信机器学习和深度学习是用于故障检测问题的良好工具。查找参考文献的好地方是 http://scholar.google.com
祝你的项目一切顺利。
嗯,正如我们在日常编码生活中一样,错误会发生,现在我遇到了这个错误,我该如何纠正?谢谢!
” —————————————————————————
NoBackendError Traceback (most recent call last)
in ()
16 import librosa.display
17 audio_path = (‘/Users/MA/Python Notebook/OK.mp3’)
—> 18 y, sr = librosa.load(audio_path)
C:\Users\MA\Anaconda3\lib\site-packages\librosa\core\audio.py in load(path, sr, mono, offset, duration, dtype)
107
108 y = []
–> 109 with audioread.audio_open(os.path.realpath(path)) as input_file
110 sr_native = input_file.samplerate
111 n_channels = input_file.channels
C:\Users\MA\Anaconda3\lib\site-packages\audioread\__init__.py in audio_open(path)
112
113 # All backends failed!
–> 114 raise NoBackendError()
NoBackendError
”
我只是在尝试将歌曲加载到 librosa 时才收到此错误……
谢谢!!@Jason Brownlee
抱歉,这看起来是你的 librosa 库的问题,而不是机器学习问题。我无法给你专业建议,抱歉。
谢谢,我已经成功纠正了这个错误……
祝大家周日快乐……
很高兴听到这个消息,Alex。
你是如何解决这个问题的?
你好,Jason,感谢你提供的精彩示例。
我在笔记本电脑上运行了相同的代码。但结果不一致。可能的原因是什么?
我使用的是 windows 8.1 64bit+eclipse+anaconda 4.2+theano 0.9.4+CUDA7.5
我的结果如下。
…… ……
纪元 145/150
10/768 […………………………] – ETA: 0s – loss: 0.3634 – acc: 0.8000
80/768 [==>………………………] – ETA: 0s – loss: 0.4066 – acc: 0.7750
150/768 [====>…………………….] – ETA: 0s – loss: 0.4059 – acc: 0.8067
220/768 [=======>………………….] – ETA: 0s – loss: 0.4047 – acc: 0.8091
300/768 [==========>……………….] – ETA: 0s – loss: 0.4498 – acc: 0.7867
380/768 [=============>…………….] – ETA: 0s – loss: 0.4595 – acc: 0.7895
450/768 [================>………….] – ETA: 0s – loss: 0.4568 – acc: 0.7911
510/768 [==================>………..] – ETA: 0s – loss: 0.4553 – acc: 0.7882
580/768 [=====================>……..] – ETA: 0s – loss: 0.4677 – acc: 0.7776
660/768 [========================>…..] – ETA: 0s – loss: 0.4697 – acc: 0.7788
740/768 [===========================>..] – ETA: 0s – loss: 0.4611 – acc: 0.7838
768/768 [==============================] – 0s – loss: 0.4614 – acc: 0.7799
纪元 146/150
10/768 […………………………] – ETA: 0s – loss: 0.3846 – acc: 0.8000
90/768 [==>………………………] – ETA: 0s – loss: 0.5079 – acc: 0.7444
170/768 [=====>……………………] – ETA: 0s – loss: 0.4500 – acc: 0.7882
250/768 [========>…………………] – ETA: 0s – loss: 0.4594 – acc: 0.7840
330/768 [===========>………………] – ETA: 0s – loss: 0.4574 – acc: 0.7818
400/768 [==============>……………] – ETA: 0s – loss: 0.4563 – acc: 0.7775
470/768 [=================>…………] – ETA: 0s – loss: 0.4654 – acc: 0.7723
540/768 [====================>………] – ETA: 0s – loss: 0.4537 – acc: 0.7870
620/768 [=======================>……] – ETA: 0s – loss: 0.4615 – acc: 0.7806
690/768 [=========================>….] – ETA: 0s – loss: 0.4631 – acc: 0.7739
750/768 [============================>.] – ETA: 0s – loss: 0.4649 – acc: 0.7733
768/768 [==============================] – 0s – loss: 0.4636 – acc: 0.7734
第 147 周期/150
10/768 […………………………] – ETA: 0s – loss: 0.3561 – acc: 0.9000
90/768 [==>………………………] – ETA: 0s – loss: 0.4167 – acc: 0.8556
170/768 [=====>……………………] – ETA: 0s – loss: 0.4824 – acc: 0.8059
250/768 [========>…………………] – ETA: 0s – loss: 0.4534 – acc: 0.8080
330/768 [===========>………………] – ETA: 0s – loss: 0.4679 – acc: 0.7848
400/768 [==============>……………] – ETA: 0s – loss: 0.4590 – acc: 0.7950
460/768 [================>………….] – ETA: 0s – loss: 0.4619 – acc: 0.7913
530/768 [===================>……….] – ETA: 0s – loss: 0.4562 – acc: 0.7868
600/768 [======================>…….] – ETA: 0s – loss: 0.4497 – acc: 0.7883
680/768 [=========================>….] – ETA: 0s – loss: 0.4525 – acc: 0.7853
760/768 [============================>.] – ETA: 0s – loss: 0.4568 – acc: 0.7803
768/768 [==============================] – 0s – loss: 0.4561 – acc: 0.7812
第 148 周期/150
10/768 […………………………] – ETA: 0s – loss: 0.4183 – acc: 0.9000
80/768 [==>………………………] – ETA: 0s – loss: 0.3674 – acc: 0.8750
160/768 [=====>……………………] – ETA: 0s – loss: 0.4340 – acc: 0.8250
240/768 [========>…………………] – ETA: 0s – loss: 0.4799 – acc: 0.7583
320/768 [===========>………………] – ETA: 0s – loss: 0.4648 – acc: 0.7719
400/768 [==============>……………] – ETA: 0s – loss: 0.4596 – acc: 0.7775
470/768 [=================>…………] – ETA: 0s – loss: 0.4475 – acc: 0.7809
540/768 [====================>………] – ETA: 0s – loss: 0.4545 – acc: 0.7778
620/768 [=======================>……] – ETA: 0s – loss: 0.4590 – acc: 0.7742
690/768 [=========================>….] – ETA: 0s – loss: 0.4769 – acc: 0.7652
760/768 [============================>.] – ETA: 0s – loss: 0.4748 – acc: 0.7658
768/768 [==============================] – 0s – loss: 0.4734 – acc: 0.7669
第 149 周期/150
10/768 […………………………] – ETA: 0s – loss: 0.3043 – acc: 0.9000
90/768 [==>………………………] – ETA: 0s – loss: 0.4913 – acc: 0.7111
170/768 [=====>……………………] – ETA: 0s – loss: 0.4779 – acc: 0.7588
250/768 [========>…………………] – ETA: 0s – loss: 0.4794 – acc: 0.7640
320/768 [===========>………………] – ETA: 0s – loss: 0.4957 – acc: 0.7562
370/768 [=============>…………….] – ETA: 0s – loss: 0.4891 – acc: 0.7703
450/768 [================>………….] – ETA: 0s – loss: 0.4737 – acc: 0.7867
520/768 [===================>……….] – ETA: 0s – loss: 0.4675 – acc: 0.7865
600/768 [======================>…….] – ETA: 0s – loss: 0.4668 – acc: 0.7833
680/768 [=========================>….] – ETA: 0s – loss: 0.4677 – acc: 0.7809
760/768 [============================>.] – ETA: 0s – loss: 0.4648 – acc: 0.7803
768/768 [==============================] – 0s – loss: 0.4625 – acc: 0.7826
第 150 周期/150
10/768 […………………………] – ETA: 0s – loss: 0.2751 – acc: 1.0000
100/768 [==>………………………] – ETA: 0s – loss: 0.4501 – acc: 0.8100
170/768 [=====>……………………] – ETA: 0s – loss: 0.4588 – acc: 0.8059
250/768 [========>…………………] – ETA: 0s – loss: 0.4299 – acc: 0.8200
310/768 [===========>………………] – ETA: 0s – loss: 0.4298 – acc: 0.8129
380/768 [=============>…………….] – ETA: 0s – loss: 0.4365 – acc: 0.8053
460/768 [================>………….] – ETA: 0s – loss: 0.4469 – acc: 0.7957
540/768 [====================>………] – ETA: 0s – loss: 0.4436 – acc: 0.8000
620/768 [=======================>……] – ETA: 0s – loss: 0.4570 – acc: 0.7871
690/768 [=========================>….] – ETA: 0s – loss: 0.4664 – acc: 0.7783
760/768 [============================>.] – ETA: 0s – loss: 0.4617 – acc: 0.7789
768/768 [==============================] – 0s – loss: 0.4638 – acc: 0.7773
32/768 [>………………………..] – ETA: 0s
448/768 [================>………….] – ETA: 0sacc: 79.69%
学习过程中存在我们还无法控制的随机性。
请看这篇文章
https://machinelearning.org.cn/randomness-in-machine-learning/
你好 Jason Brownlee,感谢分享~
我是深度学习新手。我想知道你在这里讨论的“Keras”是否可以用于在 TensorFlow 中构建 CNN 并训练一些 csv 文件进行分类。这可能是一个愚蠢的问题,但等待你的回复。我正在进行我的毕业项目,关于使用 CNN 进行词义消歧,但无法继续。希望得到你的帮助~祝你一切顺利!
抱歉 Nanya,我不确定我是否理解你的问题。你能否换个说法?
我刚刚安装了 Anaconda 和 Keras,正在使用 python 3.5。
似乎 Py3 相对于 Py2 在四舍五入方面存在错误。我认为这是因为这个更改:https://github.com/numpy/numpy/issues/5700
我删除了四舍五入,只使用了 print(predictions),它似乎可以工作,输出了浮点数。
这看起来正确吗?
…
第 150 周期/150
0s – loss: 0.4593 – acc: 0.7839
[[ 0.79361773]
[ 0.10443526]
[ 0.90862554]
……,
[ 0.33652252]
[ 0.63745886]
[ 0.11704451]]
很好,看起来确实不错!
你好 Jason Brownlee
我尝试修改了你的示例来解决我的问题(字母识别,http://archive.ics.uci.edu/ml/datasets/Letter+Recognition)。
我的数据集看起来像 http://archive.ics.uci.edu/ml/machine-learning-databases/letter-recognition/letter-recognition.data (T,2,8,3,5,1,8,13,0,6,6,10,8,0,8,0,8)。我尝试将数据分割成输入和输出,如下所示:
X = dataset[:,1:17]
Y = dataset[:,0]
但我遇到了一些错误(与字符串未被识别有关)。
我尝试用 ASCII 码修改每个字母(A 变成 65,以此类推)。字符串错误消失了。
程序现在可以编译了,但输出看起来像这样:
17445/20000 [=========================>….] – ETA: 0s – loss: -1219.4768 – acc:0.0000e+00
17605/20000 [=========================>….] – ETA: 0s – loss: -1219.4706 – acc:0.0000e+00
17730/20000 [=========================>….] – ETA: 0s – loss: -1219.4566 – acc:0.0000e+00
17890/20000 [=========================>….] – ETA: 0s – loss: -1219.4071 – acc:0.0000e+00
18050/20000 [==========================>…] – ETA: 0s – loss: -1219.4599 – acc:0.0000e+00
18175/20000 [==========================>…] – ETA: 0s – loss: -1219.3972 – acc:0.0000e+00
18335/20000 [==========================>…] – ETA: 0s – loss: -1219.4642 – acc:0.0000e+00
18495/20000 [==========================>…] – ETA: 0s – loss: -1219.5032 – acc:0.0000e+00
18620/20000 [==========================>…] – ETA: 0s – loss: -1219.4391 – acc:0.0000e+00
18780/20000 [===========================>..] – ETA: 0s – loss: -1219.5652 – acc:0.0000e+00
18940/20000 [===========================>..] – ETA: 0s – loss: -1219.5520 – acc:0.0000e+00
19080/20000 [===========================>..] – ETA: 0s – loss: -1219.5381 – acc:0.0000e+00
19225/20000 [===========================>..] – ETA: 0s – loss: -1219.5182 – acc:0.0000e+00
19385/20000 [============================>.] – ETA: 0s – loss: -1219.6742 – acc:0.0000e+00
19535/20000 [============================>.] – ETA: 0s – loss: -1219.7030 – acc:0.0000e+00
19670/20000 [============================>.] – ETA: 0s – loss: -1219.7634 – acc:0.0000e+00
19830/20000 [============================>.] – ETA: 0s – loss: -1219.8336 – acc:0.0000e+00
19990/20000 [============================>.] – ETA: 0s – loss: -1219.8532 – acc:0.0000e+00
20000/20000 [==============================] – 1s – loss: -1219.8594 – acc: 0.0000e+00
18880/20000 [===========================>..] – ETA: 0sacc: 0.00%
我不明白为什么。你能帮帮我吗?
你使用的是哪个版本的 Python?
嗨,Jason,
由于 epoch 设置为 150,batch size 为 10,训练算法是在每次迭代中随机选择 10 个训练样本,还是在我们已经有 768 个总数的情况下?或者它是否在完成所有样本后随机采样?
谢谢
好问题,
它遍历数据集 150 次,在一个 epoch 内,它每次处理 10 行,然后更新权重。在每个 epoch 之前,模式都会被打乱。
希望这能有所帮助。
嗨 Jason
非常感谢这篇博文。它确实帮助我开始学习一直计划了几个月的深度学习。你那些简单而丰富的博文太棒了。在完成所有教程之前,我没有问题。
关于你的书的可用性有一个问题。我如何在印度购买这些书?
我所有的书籍和培训都是数字化的,你可以在这里购买:
https://machinelearning.org.cn/products
你好 Jason,首先,你在这里的工作是一个很棒的资源,我非常感谢你付出的努力。
我对 Python 的掌握程度略高于初学者,对 ML 是绝对的新手,我想知道你是否能帮我将我的问题分类并找到一个角度来处理它。
我的数据是这样的:
列名:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 结果
值:4, 4, 6, 6, 3, 2, 5, 5, 0, 0, 0, 0, 0, 0, 0, 4
我想找到每个列名类别作为结果的百分比概率,这取决于所有值(1-15)的配置。然后,如果需要,比较值配置与另一行值以找到相同的,从而得到所需的总计算:
列名:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 结果
值:4, 4, 6, 6, 3, 2, 5, 5, 0, 0, 0, 0, 0, 0, 0, 4
值2:7, 3, 5, 1, 4, 8, 6, 2, 9, 9, 9, 9, 9, 9, 9
如果我的解释不清楚,我先致歉,并感谢您提供的任何帮助。
你好 Stephen,
这个过程可能有助于你解决问题:
https://machinelearning.org.cn/start-here/#process
特别是定义问题的第一步。
告诉我进展如何。
感谢 Jason 提供了如此好且简洁的示例。
我只想问一下,是否可以将此模型保存在文件中,并移植到 Android 或 iOS 设备?如果可以,有哪些库可供使用?
谢谢
Rohit
谢谢 Rohit,
这是将 Keras 模型保存到文件的示例:
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
我不知道如何在 Android 或 iOS 设备上运行 Keras。让我知道你的进展。
亲爱的 Jason,感谢分享这篇文章。
我是深度学习的新手,如果我的问题不清楚,请原谅。我的问题是,我们能否从任何 .php, .aspx, 或 .html 网页调用所有这些函数和程序?我的意思是,我从用户界面加载变量和其他文件选择,然后将它们作为输入传递给这些函数。
期待您的回复。
提前感谢。
zaheer
也许,这听起来像一个系统设计问题,而不是机器学习问题。
我建议你像任何软件工程项目一样,收集需求,评估风险。
嗨,Jason
感谢您的博客!太棒了!
我使用 tensorflow 作为后端,并在 Jupyter 中实现了这些过程。
我执行了“source activate tensorflow”->“ipython notebook”。
我可以使用 Keras 并导入 tensorflow。
然而,似乎这样的环境不支持 pandas 和 sklearn。
您有什么方法可以将 pandas、sklearn 和 keras 结合起来吗?
(我想使用 sklearn 回顾分类问题并比较与深度学习方法的准确性。但我也想在同一个界面中整合这些工作。)
谢谢!
抱歉,我个人不使用 notebook,因此无法提供好的建议。
谢谢你,Jason!
实际上问题不在 notebook。即使我使用了终端模式,即只执行“source activate tensorflow”。它也无法导入 sklearn。这是否意味着 tensorflow 库与 sklearn 不兼容?再次感谢!
抱歉 Hsiang,我没有在虚拟环境中使用 sklearn 和 tensorflow 的经验。
谢谢!
不客气 Hsiang。
你好先生,
这确实是一篇非常有信息量的帖子。我知道我的问题很琐碎,但你能否向我展示如何在显式指定的数据元组上进行预测,例如 v=[6,148,72,35,0,33.6,0.627,50]
不过还是谢谢你的教程。
你好 keshav,
你可以通过调用 model.predict() 来进行预测。
当我重新运行文件(不进行预测)时,它是否会重置模型和权重?
打扰一下,我想问您一个关于这段话的问题:“dataset = numpy.loadtxt(“pima-indians-diabetes.csv”,delimiter=’,’)”,我在 Mac 上使用了这个并下载了数据集,然后我将文本转换成了 csv 文件。运行程序。
然后我得到:{Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 12:39:47)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
输入“copyright”、“credits”或“license()”获取更多信息。
>>>
============ RESTART: /Users/luowenbin/Documents/database_test.py ============
使用 TensorFlow 后端。
回溯(最近一次调用)
File “/Users/luowenbin/Documents/database_test.py”, line 9, in
dataset = numpy.loadtxt(“pima-indians-diabetes.csv”,delimiter=’,’)
File “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/npyio.py”, line 985, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
File “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/npyio.py”, line 687, in floatconv
return float(x)
ValueError: could not convert string to float: book
>>> }
我该如何解决这个问题?请帮帮我,谢谢!
你好 Ericson,
确认“pima-indians-diabetes.csv”的内容符合你对 CSV 行列表的预期。
打扰一下,当我运行这段代码来处理我的数据集时,我遇到了这个问题……请帮助我找到解决这个问题的方法
runfile(‘C:/Users/sukhpal/.spyder/temp.py’, wdir=’C:/Users/sukhpal/.spyder’)
使用 TensorFlow 后端。
回溯(最近一次调用)
File “”, line 1, in
runfile(‘C:/Users/sukhpal/.spyder/temp.py’, wdir=’C:/Users/sukhpal/.spyder’)
File “C:\Users\sukhpal\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py”, line 866, in runfile
execfile(filename, namespace)
File “C:\Users\sukhpal\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py”, line 87, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File “C:/Users/sukhpal/.spyder/temp.py”, line 1, in
来自 keras.models import Sequential
File “C:\Users\sukhpal\Anaconda2\lib\site-packages\keras\__init__.py”, line 2, in
from . import backend
File “C:\Users\sukhpal\Anaconda2\lib\site-packages\keras\backend\__init__.py”, line 67, in
from .tensorflow_backend import *
File “C:\Users\sukhpal\Anaconda2\lib\site-packages\keras\backend\tensorflow_backend.py”, line 1, in
import tensorflow as tf
ImportError: No module named tensorflow
这是最新版本 tensorflow 的一个变化,我将对此进行调查并修改示例。
目前,请考虑安装和使用旧版本的 tensorflow。
很棒的教程!你付出了惊人的努力,并且营销技巧也很棒(我也有电子邮件列表、电子书和序列等)。我在 Jupyter notebook 中运行了这个……我注意到第 144 个 epoch (acc .7982) 的准确率比第 150 个 epoch 更高。为什么会这样?
附注:我为打印执行了此操作:print(numpy.round(predictions))
它似乎可以避免打印包含 dtype(混乱)的数组列表。
谢谢你,威尔。
模型在学习过程中性能会有波动。您可以配置触发式检查点,在检测到训练/验证性能下降等条件时保存模型。这是一个例子。
https://machinelearning.org.cn/check-point-deep-learning-models-keras/
请帮我找出这个错误
runfile('C:/Users/sukhpal/.spyder/temp.py', wdir='C:/Users/sukhpal/.spyder') ERROR: execution aborted
我不确定,Sukhpal。
考虑在命令行中运行代码,我个人不使用 IDE。
请帮我找出这个错误,找出这个错误
Epoch 194/195
195/195 [==============================] – 0s – loss: 0.2692 – acc: 0.8667
Epoch 195/195
195/195 [==============================] – 0s – loss: 0.2586 – acc: 0.8667
195/195 [==============================] – 0s
回溯(最近一次调用)
Kamal,具体是什么错误?
先生,当我用我的数据集运行代码时
它没有显示总体准确率,尽管它显示了整个迭代的准确率和损失。
Kamal,我不太明白你的问题,你能再说一遍吗?
嗨 Jason,我刚开始用 Keras 和 Theano 在 Python 中进行深度学习。我按照安装说明成功进行了安装。测试了一些例子,但当我逐行运行这个例子时,一旦我运行“model.fit(X,Y, nb_epochs=150, batch_size=10”就会出现很多异常和错误。
你遇到了什么错误?
嗨,我怎么知道要为 random.seed() 使用什么数字?我的意思是,你使用了 7,有什么原因吗?另外,在代码的开头使用一次就足够了吗?
CrisH,你可以使用任何数字。固定的随机种子使示例可重现。
你可以在这篇帖子中了解更多关于随机性和随机种子的信息。
https://machinelearning.org.cn/randomness-in-machine-learning/
我是深度学习新手,找到了这个很棒的教程。继续努力,期待!
谢谢!
嗨,我在执行上面的例子时遇到了问题,它似乎运行不正常,并在“Using TensorFlow backend”处停止。
第 147 周期/150
768/768 [==============================] – 0s – loss: 0.4709 – acc: 0.7878
第 148 周期/150
768/768 [==============================] – 0s – loss: 0.4690 – acc: 0.7812
第 149 周期/150
768/768 [==============================] – 0s – loss: 0.4711 – acc: 0.7721
第 150 周期/150
768/768 [==============================] – 0s – loss: 0.4731 – acc: 0.7747
32/768 [>………………………..] – ETA: 0sacc: 76.43%
我是这个领域的初学者,你能指导我关于这个错误吗。
我还在另一个数据集上执行了此操作,它以相同的行为停止。
具体是什么错误?例子卡住了吗?
也许可以尝试 Theano 后端看看是否有区别。另外,请确保你的所有库都是最新的。
亲爱的 Jason,
非常感谢您的宝贵建议。我尝试了 Theano 后端,也更新了我所有的库,但它又卡在了
768/768 [==============================] – 0s – loss: 0.4656 – acc: 0.7799
第 149 周期/150
768/768 [==============================] – 0s – loss: 0.4589 – acc: 0.7826
第 150 周期/150
768/768 [==============================] – 0s – loss: 0.4611 – acc: 0.7773
32/768 [>………………………..] – ETA: 0sacc: 78.91%
听到这个消息我很难过,我以前没见过这个问题。
可能是内存问题或 CPU 过热问题?你能尝试使用不同的硬件吗?
嗨!
你是否找到了解决方案?
我遇到了完全相同的问题。
( ... )
第 149 周期/150
768/768 [==============================] – 0s – loss: 0.4593 – acc: 0.7773
第 150 周期/150
768/768 [==============================] – 0s – loss: 0.4586 – acc: 0.7891
32/768 [>………………………..] – ETA: 0sacc: 76.69%
你好,先生,
我想问一下,我们能否通过增加层数将此代码转换为深度学习?
当然可以增加层数,试试看。
你好先生,
你能告诉我如何在每一层确定神经元数量吗?因为我使用的是不同的数据集,我不知道每一层有多少神经元。
嗨 Ananya,好问题。
抱歉,关于如何配置神经网络,没有很好的理论。
你可以通过反复试验来配置层中的神经元数量。同时也可以考虑调整 epoch 数和 batch size。
非常感谢您,先生。它成功了!🙂
很高兴听到这个消息,Ananya。
嗨,Jason,
这个博客非常有帮助。我想问一下收敛需要多长时间?
我的数据集大约有 4000 条记录,3 个输入列和 1 个输出列。我提出了以下模型
def create_model(dropout_rate=0.0, weight_constraint=0, learning_rate=0.001, activation=’linear’)
# 创建模型
model = Sequential()
model.add(Dense(6, input_dim=3, init=’uniform’, activation=activation, W_constraint=maxnorm(weight_constraint)))
model.add(Dropout(dropout_rate))
model.add(Dense(1, init=’uniform’, activation=’sigmoid’))
# Optimizer
optimizer = Adam(lr=learning_rate)
# 编译模型
model.compile(loss=’binary_crossentropy’, optimizer=optimizer, metrics=[‘accuracy’])
return model
# 创建模型
model = KerasRegressor(build_fn=create_model, verbose=0)
# define the grid search parameters
batch_size = [10]
epochs = [100]
weight_constraint = [3]
dropout_rate = [0.9]
learning_rate = [0.01]
activation = [‘linear’]
param_grid = dict(batch_size=batch_size, nb_epoch=epochs, dropout_rate=dropout_rate, \
weight_constraint=weight_constraint, learning_rate=learning_rate, activation=activation)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=5)
grid_result = grid.fit(X_train, Y_train)
我有一个 32 核的机器,拥有 64GB RAM,一个多小时都无法收敛。我可以看到所有核心都在忙碌,所以它正在使用所有核心进行训练。但是,如果我将输入神经元更改为 3,它大约在 2 分钟内收敛。
Keras 版本:1.1.1
Tensorflow 版本:0.10.0rc0
theano 版本:0.8.2.dev-901275534cbfe3fbbe290ce85d1abf8bb9a5b203
它正在使用 Tensorflow 后端。你能帮我理解发生了什么,或者指明正确的方向吗?你认为切换到 Theano 会有帮助吗?
祝好,
Jayant
这篇帖子可能有助于你调整深度学习模型。
https://machinelearning.org.cn/improve-deep-learning-performance/
希望这些能作为一个开始有所帮助。
你好先生,
你能告诉我如何将代码的结果绘制成图表吗?我对代码做了一些调整,以便在不同的数据集上运行它。
Animesh,你具体想画什么?
输入层神经元数量和隐藏层神经元数量与准确率的关系。
先生,你能解释一下
此语句中使用的不同属性
print(“%s: %.2f%%” % (model.metrics_names[1], scores[1]*100))
准确地说,model.metrics_names 是什么?
model.metrics_names 是在训练期间收集的指标名称列表。
更多细节在此
https://keras.org.cn/models/sequential/
嗨 param,
它使用的是字符串格式化。%s 格式化字符串,%.2f 格式化带有两位小数的浮点值,%% 包含一个百分号。
您可以在这里了解更多关于 print 函数的信息。
https://docs.pythonlang.cn/3/library/functions.html#print
此处有更多关于字符串格式化的信息。
https://pyformat.info/
嗨,Jason,
这是一个很棒的帖子。你能告诉我如何在 DNN 中确定以下内容吗?1. 隐藏层中的神经元数量
2. 隐藏层的数量
谢谢。
Vijin
好问题,Vijin。
一般来说,反复试验。没有好的理论来配置神经网络。
我们进行交叉验证、网格搜索等来确定机器学习算法中的超参数。同样,我们能做些什么来识别上述参数吗??
是的,我们可以为神经网络使用网格搜索和调优。
神经网络的随机性意味着每次实验(一组配置)都必须运行多次(30?100?),以便您可以获得平均性能。
此处有更多关于神经网络调优的通用信息。
https://machinelearning.org.cn/improve-deep-learning-performance/
此处有更多关于随机性和随机算法的信息。
https://machinelearning.org.cn/randomness-in-machine-learning/
Jason,请告诉我你代码中的这些行
seed = 7
numpy.random.seed(seed)
它们做什么?为什么这样做?
还有一个问题是,为什么你将最后一部分称为“奖励:进行预测”?
我认为 ANN 就是为此创建的。如果网络的输出就是你已知的内容,那有什么意义?
它们对随机数生成器进行种子设置,以便在每次运行代码时生成相同的随机数序列。这是为了确保您获得与我相同的结果。
但是我不确定它是否适用于 Keras。
此处有更多关于机器学习中随机性的信息。
https://machinelearning.org.cn/randomness-in-machine-learning/
我在这篇教程中展示了如何构建和评估模型。独立预测部分是一个附加项。
神经网络代码中的“seed”到底有什么作用?它做什么?
Seed 指的是对随机数生成器进行种子设置,以便在每次运行示例时生成相同的随机数序列。
目标是使示例 100% 可重现,但这对于像 Theano 和 TensorFlow 后端这样的符号数学库来说很难。
有关机器学习中随机性的更多信息,请参阅此帖。
https://machinelearning.org.cn/randomness-in-machine-learning/
先生,你好
你能告诉我优化器和 binary_crossentropy 的确切作用吗?上面写着优化器用于搜索网络权重,我们具体指的是哪些权重?
嗨 Priya,
你可以在这里了解更多关于神经网络的基础知识。
https://machinelearning.org.cn/neural-networks-crash-course/
如果我没记错的话,我评论过的那些行是在我们写的时候使用的
init = ‘uniform’
?
你能更详细地解释一下 batch size 是什么吗?
嗨 Bogdan,
Batch size 是在权重根据累积误差更新之前,要显示给网络的模式数量。batch 越小,学习越快,但学习也越嘈杂(方差越大)。
尝试探索不同的 batch size,看看它们对每个 epoch 的训练和测试性能的影响。
亲爱的Jason
首先,感谢您的精彩教程。
我正在尝试使用每个数据包的前 500 个字节对计算机网络数据包进行分类,以识别其协议。我正在尝试使用一维卷积。为了简化任务,我只想进行二元分类,然后处理 10 种协议的多标签分类。这是我的代码,但准确率约为 0.63。我该如何提高性能?我应该使用 RNN 吗?
########
model=Sequential()
model.add(Convolution1D(64,10,border_mode=’valid’,
activation=’relu’,subsample_length=1, input_shape=(500, 1)))
#model.add(Convolution2D(32,5,5,border_mode=’valid’,input_shape=(1,28,28),))
model.add(MaxPooling1D(2))
model.add(Flatten())
model.add(Dense(200,activation=’relu’))
model.add(Dense(1,activation=’sigmoid’))
model.compile(loss=’binary_crossentropy’,
optimizer=’adam’,metrics=[‘accuracy’])
model.fit(train_set, y_train,
batch_size=250,
nb_epoch=30,
show_accuracy=True)
#x2= get_activations(model, 0,xprim )
#score = model.evaluate(t, y_test, show_accuracy = True, verbose = 0)
#print(score[0])
这篇帖子列出了一些尝试提升性能的想法。
https://machinelearning.org.cn/improve-deep-learning-performance/
嗨 Jason,非常感谢您的精彩教程。我刚开始学习 Python 和机器学习。
我正在修改代码,例如我更改了...
这个
# 创建模型
model = Sequential()
model.add(Dense(250, input_dim=8, init=’uniform’, activation=’relu’))
model.add(Dense(200, init=’uniform’, activation=’relu’))
model.add(Dense(200, init=’uniform’, activation=’relu’))
model.add(Dense(1, init=’uniform’, activation=’sigmoid’))
和这个
model.fit(X, Y, nb_epoch=250, batch_size=10)
然后我想为预测传递一些数组,所以...
new_input = numpy.array([[3,88,58,11,54,24.8,267,22],[6,92,92,0,0,19.9,188,28], [10,101,76,48,180,32.9,171,63], [2,122,70,27,0,36.8,0.34,27], [5,121,72,23,112,26.2,245,30]])
predictions = model.predict(new_input)
print predictions # [1.0, 1.0, 1.0, 0.0, 1.0]
这是正确的吗?在这个例子中,我使用了与 0 类相同的训练系列,但我得到了错误的结果。只有一个数组被正确预测。
非常感谢!
看起来不错。也许你可以尝试更改模型的配置,使其更具技巧性?
请看这篇文章
https://machinelearning.org.cn/improve-deep-learning-performance/
你好先生,
你能告诉我如何纠正我下面的错误吗?它在模型训练时引发
str(array.shape))
ValueError: Error when checking model input: expected convolution2d_input_1 to have 4 dimensions, but got array with shape (68, 28, 28).
看起来你正在处理 CNN,与本教程无关。
可以尝试本教程来熟悉 CNN。
使用卷积神经网络和 Python Keras 进行手写数字识别
我想要一个可以预测 sin 值的神经网络。此外,从给定的数据集中,我需要确定函数(例如,如果数据是 tan 或 cos,那么如何确定数据仅是 tan 或仅是 cos)。
提前感谢
Keras 已更新为 Keras 2.0。我在这里有一个更新版本的代码:https://github.com/sudarshan85/keras-projects/tree/master/mlm/pima_indians
干得不错。
你好先生,
我们可以在此中使用 PSO(粒子群优化)吗?如果可以,您能告诉我如何做吗?
抱歉,我没有使用 PSO 来拟合神经网络权重的示例。
你好先生,
这个代码使用的是哪种类型的神经网络?因为有三种神经网络:前馈、径向基函数和循环神经网络。
多层感知机(MLP)神经网络。一种经典的类型,源于 1980 年代。
编译时遇到这个错误。
sigmoid_cross_entropy_with_logits() 有一个意外的关键字参数 ‘labels’
也许可以确认你的库(Keras、Theano 或 TensorFlow)是否都是最新的?
嗨,Jason!
我正在尝试使用视频的两个奇数帧来预测偶数帧。因此,我需要将两个图像作为输入传递给网络,并得到一个图像作为输出。你能帮我处理第一个 model.add() 的语法吗?我的 X_train 的维度是 (190, 2, 240, 320, 3),其中 190 是奇数对的数量,2 是两个奇数图像,(240,320,3) 是每个图像的(高度,宽度,深度)。
您好,Jason,
感谢您提供的精彩教程。但我发现了一些问题
像这样的警告
1 – Warning (from warnings module)
File “/usr/lib/python2.7/site-packages/keras/legacy/interfaces.py”, line 86
‘
call to the Keras 2 API: ' + signature)
DenseUserWarning: Update your
call to the Keras 2 API:
Dense(12, activation=”relu”, kernel_initializer=”uniform”, input_dim=8)2 - 警告(来自 warnings 模块):
调用 Keras 2 API:' + signature)文件 "/usr/lib/python2.7/site-packages/keras/legacy/interfaces.py",第 86 行
'
UserWarning: 请将您的
Dense
调用更新为 Keras 2 API:Dense(8, activation="relu", kernel_initializer="uniform")
3 – 警告(来自 warnings 模块)
File “/usr/lib/python2.7/site-packages/keras/legacy/interfaces.py”, line 86
‘
调用 Keras 2 API:' + signature)
DenseUserWarning: 请将您的
调用更新为 Keras 2 API:
Dense(1, activation=”sigmoid”, kernel_initializer=”uniform”)3 - 警告(来自 warnings 模块):
nb_epoch 参数'文件 "/usr/lib/python2.7/site-packages/keras/models.py",第 826 行
warnings.warn('
fit
中的UserWarning:
fit
中的nb_epoch
参数已重命名为epochs
。我认为这是由于某些包更新引起的。
但是,预测的输出是一个零数组……
例如:[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ….0.0]
我正在 Linux 机器上运行,Fedora 24,
Python 2.7.13 (默认,2017年1月12日,17:59:37)
[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)] 在 linux2 上
为什么?
谢谢!
这些看起来是与最近的 Keras 2.0 版本相关的警告。
它们看起来只是警告,您仍然可以运行示例。
我不知道您为什么会得到全是零的输出。我将进行调查。
你好先生,
您能否帮助我使用上面给出的数据集构建一个循环神经网络?我在构建层方面遇到一些麻烦……
你好 Ananya,
Pima Indian 糖尿病数据集是一个二元分类问题。它不适合循环神经网络,因为没有序列信息可供学习。
那么您能否告诉我循环神经网络在什么类型的数据集上能准确工作?我拥有癫痫患者的脑电图信号数据集……循环网络能用在这个上面吗?
如果它足够规律,可能会。
LSTM 在具有规律性或清晰信号可检测的序列问题上表现出色。
你好 Jason,我有一个关于在教程代码运行过程中收到的错误的小问题……
当我运行
# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Python 返回以下错误:
sigmoid_cross_entropy_with_logits() 有一个意外的关键字参数 ‘labels’
抱歉,Shane,我没见过这个错误。
也许可以检查一下您的环境是否已更新到最新的深度学习库版本?
嗨,Jason,
感谢这篇精彩的文章。
我出于好奇,使用 tensorflow 后端运行了您的代码。每次运行代码时,返回的准确率都不同。Theano 没有发生这种情况。您能告诉我为什么吗?
提前感谢!
您每次运行代码都会得到不同的准确率,因为神经网络是随机的。
这与后端无关(我预计)。
此处有更多关于机器学习中随机性的信息。
https://machinelearning.org.cn/randomness-in-machine-learning/
嗨,Jason,
我是深度学习的新手,正在向您学习教程,这在以前帮助我很好地理解了机器学习。
在下面的代码中,我想知道为什么神经网络第一层的神经元数量与 input_dim 不同。
# 创建模型
model = Sequential()
model.add(Dense(12, input_dim=8, init=’uniform’, activation=’relu’))
model.add(Dense(8, init=’uniform’, activation=’relu’))
model.add(Dense(1, init=’uniform’, activation=’sigmoid’))
您可以通过“input_dim”指定输入数量,您可以通过 Dense() 的第一个参数指定第一个隐藏层的神经元数量。
非常感谢。
不客气。
嗨 Jason
当使用此代码进行 k 折交叉验证时,它不起作用。请提供二元分类的 k 折交叉验证代码。
通常神经网络对于交叉验证来说太慢/太大。
不过,您可以为 Keras 模型使用 sklearn 包装器,并将其与任何 sklearn 重采样方法一起使用。
https://machinelearning.org.cn/evaluate-performance-machine-learning-algorithms-python-using-resampling/
Jason,为什么我使用 evaluate 函数来获取我的模型在测试数据集上的准确率时,它返回的结果大于 1?我无法理解。
嘿 Jason,感谢这篇很棒的文章!我运行上面的代码时收到以下错误:
TypeError: 收到未知关键字参数:{‘epochs’: 150}
有什么想法为什么会这样?我无法使用 ‘epochs’、‘nb_epochs’ 等。
您需要更新到 Keras 版本 2.0 或更高版本。
def baseline_model()
# 创建模型
model = Sequential()
model.add(Dense(10, input_dim=25, init=’normal’, activation=’softplus’))
model.add(Dense(3, init=’normal’, activation=’softmax’))
# 编译模型
model.compile(loss=’mean_squared_error’, optimizer=’adam’, metrics=[‘accuracy’])
return model
先生,这里使用了 mean_square_error 进行损失计算。它与 LMS 算法相同吗?如果不是,我们能否使用 LMS、NLMS 或 RLS 来计算损失?
你好 Jason,非常感谢您的例子。
我的问题是,在成功训练模型并获得例如 79.2% 的准确率后,我如何在新数据上测试此模型?
例如,如果出现一个有新记录的新患者,我想为他预测结果(0 或 1),如何在代码中做到?
您可以在所有可用的训练数据上拟合模型,然后按如下方式对新数据进行预测:
谢谢 Jason,我们如何测试一个新患者是否会患糖尿病(0 或 1)?
在所有训练数据上拟合模型并调用
杰森博士,
在编译模型时,我遇到了以下错误:
TypeError: compile() 收到意外的关键字参数 'metrics'
无法解决以下错误。
确保您拥有最新版本的 Keras,v2.0 或更高版本。
你好,先生,
感谢您的文章。一个小问题,我的数据集有 24 个输入和 1 个二元输出(170 个实例,100 个 epoch,隐藏层=6 和 10 个批次,kernel_initializer=’normal’)。我使用 Tensor flow 和 keras 适配了您的代码。我的准确率在 98% 到 100% 之间。我担心我的模型会过拟合。我需要您的坦诚建议。先生,致以诚挚的问候。
是的,使用 k 折交叉验证来评估您的模型,以确保您没有欺骗自己。
谢谢您,先生
嗨,Jason,
如果我想使用糖尿病数据集(非 Pima) https://archive.ics.uci.edu/ml/datasets/Diabetes 来预测血糖,我需要从您的哪些教程和电子书开始……另外,数据当前格式的时间、代码和值是可直接使用的,还是需要将其转换为其他格式才能使用?
谢谢你的帮助
这个过程将帮助您构建和处理您的数据集。
https://machinelearning.org.cn/start-here/#process
希望这些能作为一个开始有所帮助。
杰森博士,
数据是时间序列(基于时间的数据),具有类别(20)和两个数字,一个用于胰岛素水平,另一个用于血糖水平……每个时间序列数据并不包含所有类别数据。例如,一个类别是早餐前的血糖,另一个类别是早餐后的血糖、午餐前和午餐后。有时一些这些类别数据是缺失的。我看了上面的链接,但它没有讨论时间序列、具有某些类别数据缺失的分类数据该怎么办……如果您的任何书籍能帮助澄清这些问题,请告诉我?
你好 Sethu,
我有许多关于时间序列的文章可以帮助您。从这里开始:
https://machinelearning.org.cn/start-here/#timeseries
对于分类数据,我建议先进行整数编码,然后进行独热编码。您可以在这里了解有关这些编码的更多信息。
https://machinelearning.org.cn/data-preparation-gradient-boosting-xgboost-python/
希望这能有所帮助。
你好,先生,
在使用 ANN 模型之前,是否必须对数据进行标准化?我读过一些文章,作者坚持认为每个属性都应该在 [0,1] 的范围内进行比较,以获得有意义的模型。您对此有何看法?致以诚挚的问候。
是的。您必须将数据缩放到激活函数的边界。
你好 Jason,你真是太棒了。我是许多受益于您《机器学习大师 Python》一书的人之一。我正在处理一个医学图像分类问题。我有两类医学图像(每类有 1000 张 32*32 的图像)需要由卷积神经网络处理。您能否指导我如何将这些数据加载到 Keras 数据集中?或者如何在遵循您的简单步骤的同时使用我的数据?请帮忙。
将数据加载为 numpy 数组,然后您就可以与 Keras 一起使用了。
你好,先生,
我将您的代码与交叉验证和 ANN (Keras) 管道一起适配到我的模型中。它仍然给了我 100% 的准确率。我从 UCI 获得了数据(慢性肾脏疾病)。它有 400 个实例,24 个输入属性和 1 个二元属性。当我删除带有缺失数据的行时,我剩下 170 个实例。我的数据集对于(24 个输入层、24 个隐藏层和 1 个输出层 ANN,使用 adam 和 kernel initializer 为 uniform)来说太小了吗?
它并不太小。
通常,训练数据集的大小really 取决于您打算如何使用模型。
感谢您的回复,我想我必须接受模型过拟合的问题。
嗨,Jason,
很棒的教程。喜欢这个网站 🙂
只是一个快速的问题:为什么您选择 adam 作为优化器而不是 sgd?此外,何时使用 sgd 优化,它具体包含什么?
谢谢
ADAM 似乎始终在很少或无需定制的情况下运行良好。
SGD 需要配置至少学习率和动量。
尝试几种方法,并使用最适合您问题的方法。
谢谢 🙂
你好,先生,
先生,您好,如何获取 keras ANN 的所有权重和偏差?致以诚挚的问候。
您可以保存网络权重,请参阅此文章。
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
您还可以使用 API 直接访问权重。
嗨,Jason,
我目前正在处理您书中提到的 IMDB 情感分析问题。我使用的是 Anaconda 3 和 Python 3.5.2。在尝试总结评论长度时,正如您在书中提到的那样,当我尝试执行命令时:
result = map(len, X)
print(“Mean %.2f words (%f)” % (numpy.mean(result), numpy.std(result)))
它返回错误:不支持的操作数类型:‘map’ 和 ‘int’
请帮助修改语法。期待您的回复……
很遗憾听到您遇到这个问题。也许可以注释掉那一行?
或者修改它以删除格式,只打印原始的平均值和标准差供您查看?
您好,我对 Python、Numpy 和 Keras 还比较陌生(背景是 PHP、MYSQL 等)。如果存在 8 个输入变量和 1 个输出变量(总共 9 个),并且数组索引从零开始(根据我所了解的,它是一个基于 Python 列表构建的 Numpy 数组),并且顺序是 [行, 列],那么我们的输入变量 (X) 是否应该是 X = dataset[:,0:7](其中我们选择第 1 列到第 8 列,即索引 0 到 7),输出变量 (Y) 是否应该是 Y = dataset[:,8](其中我们选择第 9 列,即索引 8)?
您可以在这里了解更多关于 NumPy 数组索引的信息。
https://docs.scipy.org.cn/doc/numpy/reference/arrays.indexing.html
我在预测部分遇到了麻烦。它抛出了 ValueError:检查模型输入时出错:expected dense_1_input to have shape (None, 502) but got array with shape (170464, 502)
### 进行预测 ###
testset = numpy.loadtxt(“right_stim_FD1.csv”, delimiter=”,”)
A = testset[:,0:502]
B = testset[:,502]
probabilities = model.predict(A, batch_size=10, verbose=1)
predictions = float(round(a) for a in probabilities)
accuracy = numpy.mean(predictions == B)
#round predictions
#rounded = [round(x[0]) for x in predictions]
print(predictions)
print(“预测准确率:%.2f%%” % (accuracy*100))
看起来您可能将整个数据集作为输出 (y) 而不是仅输出变量。
你好,
我有一个关于深度学习的问题。在本教程中,我们使用 Keras 构建了一个 MLP。这是深度学习,还是只是一个 MLP 反向传播?
如今,深度学习就是 MLP 反向传播。
https://machinelearning.org.cn/what-is-deep-learning/
通常,深度学习指的是具有许多层的 MLP。
你好,
您介意我将此代码用作学校项目中的简单网络示例吗?
需要事先征求您的同意,因为我在本教程中找不到您允许任何人使用该代码的地方,而且我课程的伦理要求我这样做(当然,要注明出处)。
诚挚的问候
Eric T
是的,可以,但我概不负责,您必须注明来源。
我在我的 FAQ 中回答了这个问题。
https://machinelearning.org.cn/start-here/#faq
嗨 Jason
我有一个问题
我的数据集有 500 条记录。但我老师想要我的数据集有 100,000 条记录。我必须有一个新的数据生成算法。请帮帮我。
您能否提供一个深度 CNN 代码,其中包含 25 层?在第一层卷积层中,滤波器大小应为 39x39,总共 64 个滤波器;在第 2 层卷积层中,为 21x21,32 个滤波器;在第 3 层卷积层中,为 11x11,64 个滤波器;第 4 层卷积层为 7x7,32 个滤波器。输入图像大小为 256x256。我对深度学习完全陌生,但如果您能为我编写代码,那将大有帮助。谢谢。
可以考虑使用现成的模型,如 VGG。
https://keras.org.cn/applications/
我必须跟踪 Facebook 指标。但结果非常低。请帮助我。
我更改了输入,但没有改善。
http://archive.ics.uci.edu/ml/datasets/Facebook+metrics
我有一系列建议,可以作为开始。
https://machinelearning.org.cn/improve-deep-learning-performance/
嗨,Jason,
很棒的教程,感谢您的辛勤工作。
我有一个问题,因为我是 keras 和 tensorflow 的初学者。
我已经安装了 keras 和 tensorflow,都是最新版本,并且我运行了您的示例,但一直收到相同的错误:
回溯(最近一次调用)
File “CNN.py”, line 18, in
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
File “/Users/MacBookPro1/.virtualenvs/keras_tf/lib/python2.7/site-packages/keras/models.py”, line 777, in compile
**kwargs)
File “/Users/MacBookPro1/.virtualenvs/keras_tf/lib/python2.7/site-packages/keras/engine/training.py”, line 910, in compile
sample_weight, mask)
File “/Users/MacBookPro1/.virtualenvs/keras_tf/lib/python2.7/site-packages/keras/engine/training.py”, line 436, in weighted
score_array = fn(y_true, y_pred)
文件“/Users/MacBookPro1/.virtualenvs/keras_tf/lib/python2.7/site-packages/keras/losses.py”,第51行,在binary_crossentropy中
return K.mean(K.binary_crossentropy(y_pred, y_true), axis=-1)
文件“/Users/MacBookPro1/.virtualenvs/keras_tf/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py”,第2771行,在binary_crossentropy中
logits=output)
TypeError: sigmoid_cross_entropy_with_logits() got an unexpected keyword argument ‘labels’
可以帮我吗?谢谢
Alessandro
哎呀,我之前没见过这个错误。
一些想法
– 考虑尝试theano后端,看看是否有区别。
– 尝试在keras用户组和slack频道搜索/发帖。
– 尝试在stackoverflow或cross validated搜索/发帖。
告诉我进展如何。
嗨,Jason,
我找到了问题所在。tensorflow安装过时了;所以我更新了它,一切
都运行得很顺利。
晚安,
Alessandro
很高兴听到这个消息,Alessandro。
感谢Brownlee先生您精彩且易于理解的讲解
谢谢。
嗨,Jason,
非常感谢您精彩的教程。我有一个关于度量的问题。除了“准确率”之外,是否还有默认的方法来声明“精确率”和“召回率”?
祝好
WAZED
是的,请看这里
https://keras.org.cn/metrics/
嗨,Jason,
请给我一份简短的说明,其中包含我可以从头开始学习深度学习的资源。感谢您准备的精彩内容。
提前感谢
是的,我的电子邮件是chiranjib.konwar@gmail.com
这里:
https://machinelearning.org.cn/start-here/#deeplearning
为什么神经网络经常出错?
你具体指的是什么?
嗨,Jason,
在应用fit方法时,我似乎遇到了一个错误
ValueError: Error when checking input: expected dense_1_input to have shape (None, 12) but got array with shape (767, 8)
我查找了这个问题,最常见的建议似乎是升级keras和theno,我做到了,但问题仍未解决。
确保您已从帖子中准确复制了代码。
嗨,Jason,
我卡在一个错误上
TypeError: sigmoid_cross_entropy_with_logits() got an unexpected keyword argument ‘labels’
我的tensor flow和keras版本是
keras: 2.0.4
Tensorflow: 0.12
很遗憾听到这个消息,我之前没见过这个错误。也许您可以向stackoverflow或keras用户组提问?
有谁能告诉我这里用的是哪种神经网络吗?是MLP吗?
是的,它是一种多层感知器(MLP)前馈神经网络。
嗨,Jason,
我在CPU的PC上成功运行了此代码。
如果我必须在另一台包含GPU的PC上运行相同的代码,我应该添加哪一行才能确保它在GPU上运行?
代码将保持不变,您将更改Keras后端的配置。
请参考TensorFlow或Theano文档。
如果我想训练我的神经网络来检测行李是否被遗弃,该怎么做?
这个过程将帮助您端到端地解决您的预测建模问题。
https://machinelearning.org.cn/start-here/#process
嗨
我正在构建一个神经机器翻译模型,但得分是0,我不知道为什么。
这里有一些好的尝试方法。
https://machinelearning.org.cn/improve-deep-learning-performance/
Jason,首先,我非常非常感谢您让我完美地理解了这一点。在迭代150次后,我遇到了一个错误。
文件“keras_first_network.py”,第53行,在
print(“\n%s: %.2f” %(model.metrics_names[1]*100))
TypeError: not enough arguments for format string
抱歉,先生,我的错,我写错了。
确认您已准确复制该行。
Jason博士,您好,
感谢您提供Keras入门教程。
我使用了以下代码段,直接从URL加载数据集,而不是下载和保存,这使得代码更加 streamlined,无需导航到其他地方。
# 加载皮马印第安人糖尿病数据集
datasource = numpy.DataSource().open(“http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data”)
dataset = numpy.loadtxt(datasource, delimiter=”,”)
谢谢提示。
感谢这个有用的资源!
很高兴它有帮助。
尊敬的布朗利博士,
非常感谢您提供的这个出色的教程!
如果您能回答一些问题,我将不胜感激
1. “numpy.random.seed(7)”中的7是什么意思?
2. 在我的例子中,我有3个输入神经元和2个输出神经元。这是正确的表示法吗?
X = dataset[:,0:3]
Y = dataset[:,3:4]?
3. 批次大小是指每个epoch使用多少训练数据,对吗?
我以为我们必须使用整个训练数据集进行训练。在这种情况下,我会将批次大小确定为通过实验等获得的训练数据对的数量。在您的示例中,批次(大小为10)是否意味着计算机在每个epoch中始终使用相同的10个训练数据,还是在每个epoch之前都随机选择10个训练数据?
4. 评估模型时,损失(例如,loss: 0.5105 – acc: 0.7396)是什么意思?
它是输出神经元的误差函数(例如,mean_squared_error)值的总和吗?
您可以使用任何您喜欢的随机种子,更多信息请参见此处。
https://machinelearning.org.cn/reproducible-results-neural-networks-keras/
您指的是数据中的列。您的网络还需要配置正确的输入和输出数量(例如,输入层和输出层)。
批次大小是指在更新网络权重之前要处理的数据集中的样本数量。一个epoch由一个或多个批次组成。
损失是网络正在优化的项。这里我们使用对数损失。
https://en.wikipedia.org/wiki/Cross_entropy
感谢您的回复,Brownlee博士!!
我希望它有所帮助。
有什么方法可以查看这些输入之间的关系吗?本质上是了解哪些输入对输出的影响最大,或者哪些输入对影响最大?
也许可以将其与无监督深度学习相结合?如果可能的话,我希望对开发的网络有更少的“黑箱”。感谢您提供的精彩内容!
是的,尝试RFE。
https://machinelearning.org.cn/feature-selection-machine-learning-python/
嗨,Jason,
感谢您分享您的技能和能力。
我想研究每次epoch运行之间权重和预测的变化。
我已经尝试使用model.train_on_batch方法和epoch=1、batch_size等于所有样本的model.fit方法。
但似乎模型没有保存更新后的权重。
我在之前和之后打印了预测,但没有看到评估分数有变化。
以下是部分代码。
有什么想法吗?
谢谢。
# 编译模型
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 评估模型
scores = model.evaluate(X, Y)
print(“\n%s: %.2f%%” % (model.metrics_names[1], scores[1]*100))
# 运行一次模型训练,用X和Y进行比较
model.train_on_batch(X, Y)
# 拟合模型
model.fit(X, Y, epochs=1, batch_size=768)
scores = model.evaluate(X, Y)
print(“\n%s: %.2f%%” % (model.metrics_names[1], scores[1]*100))
抱歉,我还没有探索过以这种方式评估Keras模型。
这可能是一个错误,我建议准备一个最小化的示例来演示问题,并将其发布到Keras GitHub issues上。
嗨,我将此应用于泰坦尼克号数据集,但预测值均为0.4。您建议
# 创建模型
model = Sequential()
model.add(Dense(12, input_dim=4, activation=’relu’))
model.add(Dense(4, activation=’relu’))
model.add(Dense(1, activation=’sigmoid’))
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’]) #’sgd’
model.fit(X, Y, epochs=15, batch_size=10)
这篇帖子将为您提供一些关于衡量模型技能的想法。
https://machinelearning.org.cn/improve-deep-learning-performance/
Jason博士,您好,
这可能是一个愚蠢的问题,但我找不到如何做到这一点……我是一名神经网络初学者。
我拥有数量大致相同的输入(7个)和一个输出。此输出可以接受-3000到+3000之间的数字。
我想在python中构建一个神经网络模型,但我不知道如何做到。
您是否有输出与0-1不同的示例?
提前感谢
Camus
请确保您已对数据进行缩放,然后使用上述教程开始。
你好 Jason Brownlee
我使用的是相同的数据“pima-indians-diabetes.csv”,但所有预测值都小于1且为小数,无法区分任何类别。
如果我四舍五入,它们都会变成0。
我使用的是model.predict(x)函数。
您能否指导我哪里做错了,或者我如何才能获得正确的预测值?
谢谢你
请考虑您已从教程中准确复制了所有代码。
你好 Jason,
感谢您提供的精彩示例。我有一些评论。
– 您为什么选择“12”个输入的隐藏层?而不是24 / 32……这是任意的吗?
– 关于epochs和batch_size的同样问题?
这些值非常敏感!我尝试了32个输入的第一个层,epochs=500和batch_size=1000,结果却大不相同……我的准确率是65%。
感谢您的帮助。
此致。
是的,它是任意的。调整模型的参数以适应您的问题。
哇,您一年多后还在回复评论!!!……您太棒了,谢谢……
是的。
感谢您的教程,我觉得它对我开始使用Keras非常有帮助。我以前尝试过TensorFlow,但发现它非常难以使用。不过我有一个问题。我已经安装了Theano和TensorFlow,我怎么知道Keras正在使用哪个后端?再次感谢!
Keras每次运行代码时都会打印出它使用的后端。
您可以在Keras配置文件(~/.keras/keras.json)中更改后端,该文件看起来像
你好 Jason,
我对机器学习或评估深度学习模型的理解几乎为0。但是,这篇文章给了我很多信息。它以简单易懂的语言进行了解释。
非常感谢您提供的这篇文章。您能推荐一些好的读物来进一步探索机器学习或深度学习模型吗?
谢谢。
是的,从这里开始:
https://machinelearning.org.cn/start-here/#deeplearning
如果我训练了预测模型或神经网络函数脚本,如何在将供最终用户使用的应用程序中利用它们进行预测?我想使用python,但似乎我必须在Python中重新进行训练。有没有一种方法可以重写Python脚本而不重新训练,然后只调用预测函数?
您需要训练并保存最终模型,然后加载它以进行预测。
这篇帖子会让你明白。
https://machinelearning.org.cn/train-final-machine-learning-model/
Jason,我使用您的教程安装了运行此教程所需的所有内容。我遵循了您的教程并成功运行了生成的程序。您能否描述一下输出的含义?我想感谢您提供非常有信息量的教程。
768/768 [==============================] – 0s – loss: 0.4807 – acc: 0.7826
第 148 周期/150
768/768 [==============================] – 0s – loss: 0.4686 – acc: 0.7812
第 149 周期/150
768/768 [==============================] – 0s – loss: 0.4718 – acc: 0.7617
第 150 周期/150
768/768 [==============================] – 0s – loss: 0.4772 – acc: 0.7812
32/768 [>………………………..] – ETA: 0s
acc: 77.99%
这是对模型训练的总结。
最后一行评估了模型预测的准确性——主要是为了演示如何进行预测。
Shane,干得好。
哪个输出?
你好Jason,我真的很喜欢你的工作,它帮助我很多,迈出了第一步。
但我对numpy的东西不太熟悉。
所以我的问题是
dataset = numpy.loadtxt(“pima-indians-diabetes.csv”, delimiter=”,”)
# 分割为输入 (X) 和输出 (Y) 变量
X = dataset[:,0:8]
Y = dataset[:,8]
我明白了numpy.loadtxt是从cvs文件中提取信息
但括号里的东西是什么意思,比如X = dataset[:,0:8]
为什么是“:”以及为什么是0:8?
这可能非常愚蠢,但我找不到好的在线解释 😀
非常感谢!
好问题Bene,这叫做数组切片。
https://docs.scipy.org.cn/doc/numpy/reference/arrays.indexing.html
这对我很有帮助,谢谢Jason 🙂
我可以将其翻译成中文并发布到网上,以便让其他中国人阅读您的文章吗?
不,请不要。
看起来使用这行代码
np.random.seed(5)
……是多余的,也就是说,当使用相同的配置在相同的数据上训练相同的模型时,Keras在循环中的输出将产生相似的各种结果,无论它是否被设置,或者设置为哪个数字。还是我遗漏了什么?
深度学习算法是随机的(在一定范围内随机)。这意味着当在相同数据上训练相同模型时,它们将做出不同的预测/学习不同的东西。这是一个特性。
https://machinelearning.org.cn/randomness-in-machine-learning/
您可以固定随机种子以确保获得相同的结果,并且对于教程来说,帮助初学者是一个好主意。
https://machinelearning.org.cn/reproducible-results-neural-networks-keras/
在评估模型性能时,我建议重复实验n次,并将性能作为运行的平均值。有关程序,请参见此处。
https://machinelearning.org.cn/evaluate-skill-deep-learning-models/
这有帮助吗?
谢谢 Jason 🙂
我完全理解它应该做什么,但正如我指出的那样,它没有做到。如果您在循环中运行上面提供的代码10次。前10次设置了随机种子,后10次完全没有那一行代码。然后比较结果。至少我得到的结果表明效果并不存在,也就是说,这两组10次的结果会有相似的变化。
这可能表明模型被过度拟合,并且轻易地处理了训练数据。
顺便说一句,好帖子 > https://machinelearning.org.cn/evaluate-skill-deep-learning-models/
感谢分享。最近一直在思考准确率的问题,感觉目前很多常用工具的开箱即用方式在这方面有点“一团糟”。我认为很多非博士/非专家的群体(大多数人)至少在开始时会很容易感到困惑,并犯你帖子中指出的那些错误。
感谢您在该领域做出的所有杰出贡献!
很高兴它有帮助。
嗨,Jason,
我实际上正在尝试寻找“垃圾邮件过滤器用于Quora问题”,我有一个包含0和1标签以及问题列的数据集。请告知我构建此类模型的途径和方法。
谢谢
听起来是个很棒的项目。
这里的文本分类教程会很有帮助。
https://machinelearning.org.cn/start-here/#nlp
Jason您好,感谢您提供的精彩教程。
我可以使用遗传算法进行特征选择吗?
如果可以,您能否提供相关链接?
提前感谢。
当然。抱歉,我没有提供任何示例。
通常,计算机速度很快,因此通过穷举搜索测试所有组合可能更容易。
嗨,Json,
感谢您精彩的教程。
我有一个问题想请教您。
关于如何确定我们网络中的神经元数量,您有什么指导吗?
例如,您在第一层使用了12个神经元,在第二层使用了8个神经元。
您是如何决定的?
谢谢
没有,无法通过分析确定网络的配置。
我使用试错法。您可以进行网格搜索、随机搜索,或者从教程或论文中复制配置。
嗨,Json,
感谢您提供精彩的教程。
运行一个由CNN生成的模型需要多少RAM、CPU?
谢谢
这取决于您用于拟合模型的数据和模型的大小。
非常大的模型可能需要500MB或更多的RAM。
嗨,
请告诉我,如何在Keras中可视化完整的神经网络……
我正在寻找完整的架构——例如输入层、隐藏层、输出层的神经元数量以及权重。
请看下面的链接,有人使用R中的neuralnet包创建了一个漂亮的可视化/架构。
请告诉我,是否可以在KERAS中创建这样的模型
https://www.r-bloggers.com/fitting-a-neural-network-in-r-neuralnet-package/
使用Keras可视化API。
https://keras.org.cn/visualization/
ANKUR你好,,,,你好吗?
你尝试了Jason Brownlee建议的Keras可视化吗?
如果你尝试过了,请发代码给我,我也在尝试但没成功……
请指导我。
非常感谢Brownlee博士提供的精彩教程,
我有一个关于您代码的问题。
参数 metrics=[‘accuracy’]在代码中是否必需?它会改变神经网络的结果,还是仅仅用于在编译时向我显示准确率?
谢谢你!!
不,它只会在每个epoch结束后打印模型的准确率。在此了解更多关于Keras指标的信息。
https://machinelearning.org.cn/custom-metrics-deep-learning-keras-python/
嗨,Jason,
您的工作非常出色。对我帮助很大。
我最近偶然发现了一件我无法理解的事情。
对于pimas数据集,您提到
<>
当我查看pimas数据集的表格时,样本在行中,特征在列中,因此您的输入维度是列的数量。据我所见,您没有更改表格。
对于神经网络,输入通常是:样本=列,特征=行?
Keras对此有何不同?或者我可以使用这两种形状吗?如果是,那么在网络构建中有何区别?
谢谢你!!
不,特征是列,行是实例或样本。
谢谢! 🙂
我因此进行了很多讨论。
在Andrew Ng的新Coursera课程中,它被解释为样本=列,特征=行,但他当然不使用Keras,而是从头开始编程神经网络。
我对此表示怀疑,我认为您可能弄混了。列永远不是样本。
这就是我想的,但我查阅了新的Coursera课程(deeplearning.ai)的表示法,其中提到:m是数据集中的样本数量,n是输入大小,其中X的n x m次方是输入矩阵……
但无论如何,您帮助了我!谢谢。🙂
Jason您好,非常感谢您的教程,它对我帮助很大。我需要您帮助解决以下问题。
我复制了代码并运行了它。虽然我得到了分类结果,但在过程中出现了一些警告消息。如下:
警告(来自警告模块)
File “C:\Users\llfor\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\callbacks.py”, line 120
% delta_t_median)
UserWarning: Method on_batch_end() is slow compared to the batch update (0.386946)。请检查您的回调。
我不知道为什么,也找不到任何答案。期待您的回复。再次感谢!
抱歉,我以前没见过这条消息。它看起来像一个警告,您也许可以忽略它。
谢谢您的回复。我是一名深度学习初学者。我想暂时搁置它。
嗨,Jason,
很棒的文章,点赞!当我尝试在命令提示符上运行文件时,我遇到了这个错误。有什么建议吗?感谢您的回复。
#######################################################################
C:\Work\ML>python keras_first_network.py
使用 TensorFlow 后端。
2017-09-22 10:11:11.189829: W C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\
36\tensorflow\core\platform\cpu_feature_guard.cc:45] TensorFlow库未
针对AVX指令进行编译,但您的机器上存在这些指令,并且
可以加速CPU计算。
2017-09-22 10:11:11.190829: W C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\
36\tensorflow\core\platform\cpu_feature_guard.cc:45] TensorFlow库未
36\tensorflow\core\platform\cpu_feature_guard.cc:45] TensorFlow库未
针对AVX2指令进行编译,但您的机器上存在这些指令,并且
32/768 [>………………………..] – ETA: 0s
可以加速CPU计算。
#######################################################################
Jason Brownlee 2017年9月23日 上午5:35 #
Sagar 2017年9月24日 上午3:52 #
很高兴听到这个消息。
嗨,Jason,
Valentin 2017年9月26日 下午6:35 #
感谢您的精彩文章。清晰明了。
我在安装Keras时遇到了一些问题,但有人建议我在前面加上
tf.contrib.keras
所以我的代码是这样的
model=tf.contrib.keras.models.Sequential()
Dense=tf.contrib.keras.layers.Dense
1,1,0,0,8
1,2,1,0,4
1,0,0,1,5
1,0,1,0,7
0,1,0,0,8
1,4,1,0,4
1,0,2,1,1
1,0,1,0,7
现在我尝试用一个小数据文件训练Keras,看看效果如何。
前4列是输入,第5列是输出。
我使用与您文章相同的代码进行训练(调整输入数量),
但网络的准确率只有12.5%。
谢谢,
Valentin
Jason Brownlee 2017年9月27日 上午5:40 #
谢谢Valentin。
https://machinelearning.org.cn/improve-deep-learning-performance/
嗨,Jason,
Priya 2017年10月3日 下午2:28 #
我尝试用以下方式替换pima数据为随机数据:
X_train = np.random.rand(18,61250)
X_test = np.random.rand(18,61250)
0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,])
Y_train = np.array([0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0,
1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0,])
Y_test = np.array([1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0,
_, input_size = X_train.shape #将此放入第一个dense层的input_dim中
predictions = model.predict(X_test)
我移除了predictions的round(),以便可以看到完整值,然后将我的随机测试数据插入到model.fit()中。
print(preds)
preds = [x[0] for x in predictions]
model.fit(X_train, Y_train, epochs=100, batch_size=10, verbose=2, validation_data=(X_test,Y_test))
[0.49525392, 0.49652839, 0.49729034, 0.49670222, 0.49342978, 0.49490061, 0.49570397, 0.4962129, 0.49774086, 0.49475089, 0.4958384, 0.49506786, 0.49696651, 0.49869373, 0.49537542, 0.49613148, 0.49636957, 0.49723724]
我发现了一些奇怪的地方;我期望预测值在0.50左右,加上或减去一些,但相反,我得到了这个。
谢谢,
这接近0.50但总是小于0.50。我运行了几次,使用了不同的随机种子,所以这并非巧合。您对此有何解释?
Jason Brownlee 2017年10月3日 下午3:46 #
Priya 2017年10月4日 上午1:02 #
你好 Jason,
Saurabh 2017年10月7日 上午5:59 #
我尝试在我的笔记本电脑上训练这个模型,效果很好。但我尝试在google-cloud上用与您示例-5相同的说明来训练这个模型。但它失败了。
Jason Brownlee 2017年10月7日 上午7:37 #
抱歉,我对google cloud不太了解。
https://machinelearning.org.cn/develop-evaluate-large-deep-learning-models-keras-amazon-web-services/
tobegit3hub 2017年10月12日 下午6:40 #
不客气。
嗨,Jason,
Manoj 2017年10月12日 下午11:43 #
Jason Brownlee 2017年10月13日 上午5:48 #
https://machinelearning.org.cn/save-load-machine-learning-models-python-scikit-learn/
Cam 2017年10月23日 下午6:11 #
我在这个示例的`model.fit()`行中遇到语法错误。如果我同时安装了theano和tensorflow,这是否是由于库冲突?
也许要确保您的环境是最新的,并且您复制了代码。
本教程可以帮助您设置环境。
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
谢谢,已修复!
很高兴听到这个消息。
Jason您好,感谢您的示例。
如何预测X的单个元素?X[0]会引发ValueError。
ValueError: Error when checking : expected dense_1_input to have shape (None, 8) but got array with shape (8, 1)
谢谢!
您可以将其重塑为具有1行和8列。
这篇帖子将为您提供更多建议。
https://machinelearning.org.cn/index-slice-reshape-numpy-arrays-machine-learning-python/
应该是:X[0].reshape((1,8))?
是的!
尊敬的先生,
我已经按照您的指示安装和配置了环境,但在运行程序时出现了以下错误:
“from keras.utils import np_utils”
具体错误是什么?
Jason您好,感谢您的精彩教程。我刚刚学习并重现了您在“Python机器学习项目入门(一步一步)”中的程序,没有遇到问题。现在尝试这个,在`model = Sequential()`这一行遇到了麻烦,因为交互式窗口抛出了:NameError: name ‘Sequential’ is not defined。我尝试在谷歌搜索,但找不到解决方案。我已经按照您的示例代码进行了导入,如`from keras.models import Sequential`。我将其原样复制了。感谢您的帮助。
我在Visual Studio Community版本中的Anaconda 4.4.0环境中运行您的示例。已按照您早期教程的指示安装了相关包。
>> # create model
… model = Sequential()
…
回溯(最近一次调用)
文件“”,第2行,在
NameError: name ‘Sequential’ is not defined
>>> model.add(Dense(12, input_dim=8, init=’uniform’, activation=’relu’))
回溯(最近一次调用)
File “”, line 1, in
AttributeError: ‘SVC’ object has no attribute ‘add’
这看起来不太好。也许将错误发布到Stack Exchange或其他Keras支持论坛。我这里有一份Keras支持网站列表。
https://machinelearning.org.cn/get-help-with-keras/
看起来您需要安装Keras。我这里有一篇关于如何安装的教程。
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
Jason您好,
非常感谢您提供的精彩教程。
我有一个问题。
我想使用您的代码来预测未知样本的分类(1或0)。我是否应该创建一个通用的csv文件,其中包含训练(已知)和测试(未知)数据?其中,对于已知数据,“分类”列将具有已知值1或0,对于未知数据,是否应将该列留空(让代码决定结果)?
非常感谢
很好的问题。
不,您只需要输入,模型就可以预测输出,调用`model.predict(X)`。
另外,这篇帖子将大致介绍如何拟合最终模型。
https://machinelearning.org.cn/train-final-machine-learning-model/
嗨,Jason,
这真的很酷!我惊呆了!非常感谢您让初学者也能轻松上手。我有几个问题:
1)权重在哪里?我可以保存和/或检索它们吗?
2)如果我想训练包含狗和猫的图像,然后询问神经网络一张新图像是狗还是猫,我该如何将输入图像作为数组传递,以及如何将输出结果“猫”或“狗”?
再次感谢,做得太棒了!
权重在模型中,您可以将它们保存。
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
是的,您可以保存您的模型,然后对新数据调用`model.predict()`。
嗨,Jason,
您是否了解一个Python工具/包,可以像教程中那样构建神经网络,但适用于数据流挖掘?
谢谢,
Michael
没有,抱歉。
您好。能否请您解释一下为什么您将网络构建为具有12个神经元的第一层?
“第一层有12个神经元,期望8个输入变量。第二隐藏层有8个神经元,最后输出层有1个神经元来预测类别(糖尿病发作或未发作)……”
开始时难道不应该有8个神经元吗?
谢谢
输入层有8个,第一个隐藏层有12个。我通过一些试错法选择了12。
嗨,Jason,
您是否有,或者是否可以推荐一个初学者级别的图像分割方法,该方法使用深度学习?例如,我想训练一个神经网络来自动“查找”图像中的某个特征。
谢谢!
抱歉,我没有图像分割的示例,也许将来会有。
嗨,Jason,
我几周前才开始我的DL训练。根据我在课程中学到的,为了训练NN的参数,我们需要运行前向和后向传播;然而,看看您的Keras示例,我找不到任何这些传播过程。这是否意味着Keras有自己的机制来查找参数,而不是使用前向和后向传播?
谢谢!
它在幕后为您执行这些操作。
嗨,Jason,
您能解释一下我为什么会得到以下输出吗?
ValueError 回溯 (最近一次调用)
in ()
—-> 1 model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
2 model.fit(X, Y, epochs=150, batch_size=10)
3 scores = model.evaluate(X, Y)
4 print(“\n%s: %.2f%%” % (model.metrics_names[1], scores[1]*100))
/Users/badrshomrani/anaconda/lib/python3.5/site-packages/keras/models.py in compile(self, optimizer, loss, metrics, sample_weight_mode, **kwargs)
545 metrics=metrics,
546 sample_weight_mode=sample_weight_mode,
–> 547 **kwargs)
548 self.optimizer = self.model.optimizer
549 self.loss = self.model.loss
/Users/badrshomrani/anaconda/lib/python3.5/site-packages/keras/engine/training.py in compile(self, optimizer, loss, metrics, loss_weights, sample_weight_mode, **kwargs)
620 loss_weight = loss_weights_list[i]
621 output_loss = weighted_loss(y_true, y_pred,
–> 622 sample_weight, mask)
623 if len(self.outputs) > 1
624 self.metrics_tensors.append(output_loss)
/Users/badrshomrani/anaconda/lib/python3.5/site-packages/keras/engine/training.py in weighted(y_true, y_pred, weights, mask=None)
322 def weighted(y_true, y_pred, weights, mask=None)
323 # score_array has ndim >= 2
–> 324 score_array = fn(y_true, y_pred)
325 if mask is not None
326 # Cast the mask to floatX to avoid float64 upcasting in theano
/Users/badrshomrani/anaconda/lib/python3.5/site-packages/keras/objectives.py in binary_crossentropy(y_true, y_pred)
46
47 def binary_crossentropy(y_true, y_pred)
—> 48 return K.mean(K.binary_crossentropy(y_pred, y_true), axis=-1)
49
50
/Users/badrshomrani/anaconda/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py in binary_crossentropy(output, target, from_logits)
1418 output = tf.clip_by_value(output, epsilon, 1 – epsilon)
1419 output = tf.log(output / (1 – output))
-> 1420 return tf.nn.sigmoid_cross_entropy_with_logits(output, target)
1421
1422
/Users/badrshomrani/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/nn_impl.py in sigmoid_cross_entropy_with_logits(_sentinel, labels, logits, name)
147 # pylint: disable=protected-access
148 nn_ops._ensure_xent_args(“sigmoid_cross_entropy_with_logits”, _sentinel,
–> 149 labels, logits)
150 # pylint: enable=protected-access
151
/Users/badrshomrani/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/nn_ops.py 中 _ensure_xent_args(name, sentinel, labels, logits)
1696 如果 sentinel 不是 None
1697 raise ValueError(“只能使用 `
%s
” 括起来的名称参数调用”-> 1698 “命名参数(labels=..., logits=..., ...)” % name)
1699 如果 labels 是 None 或 logits 是 None
1700 raise ValueError(“必须同时提供 labels 和 logits。”)
ValueError: 只能使用 `sigmoid_cross_entropy_with_logits` 的命名参数(labels=..., logits=..., ...)调用
也许可以仔细检查一下您是否安装了最新版本的 Keras 和 TensorFlow 库?!
Keras 已过时
很高兴听到您解决了这个问题。
Jason,您好,感谢您提供的简短教程,这对于通过一个简单的例子来实际动手非常有帮助。
我尝试了 5 种不同的参数,并获得了一些有趣的结果,想看看会发生什么。不幸的是,我没有记录运行时间。
测试 1 测试 2 测试 3 测试 4 测试 5 测试 6 测试 7
层数 3 3 3 3 3 3 4
训练集 768 768 768 768 768 768 768
迭代次数 150 100 1000 1000 1000 150 150
更新率 10 10 10 5 1 1 5
错误数 173 182 175 139 161 169 177
值 768 768 768 768 768 768 768
% 错误 23.0000% 23.6979% 22.7865% 18.0990% 20.9635% 22.0052% 23.0469%
我似乎看不到任何趋势……这可能有助于我调整超参数。
您对此有什么建议吗?
有什么问题。这里有一些可以尝试的好建议
https://machinelearning.org.cn/improve-deep-learning-performance/
您好,我尝试使用 fer2013.csv 实现上面的示例,但我收到一个错误,能否帮助我正确实现?
抱歉,我无法调试您的代码。
问题究竟是什么?
你好,
我有一个比较普遍的问题。
我需要为餐厅销售进行预测(即我需要根据历史每日销售数据、天气状况(如温度、降雨等)、官方节假日和淡旺季来预测 4 种餐点)。我需要使用神经网络来进行此预测。
不幸的是,我 Python 技术不太熟练。我的电脑上安装了 Python 2.7 和 Anaconda。我正在尝试通过您的代码来学习,Brownlee 先生。但是不知为何,我在 Spyder 中无法运行代码。您能否告诉我需要在我的电脑上安装什么版本的 Python 和 Anaconda,以及在哪个环境中(jupyterlab、notebook、qtconsole、spyder 等)可以运行代码,这样才能正常工作而不会从一开始就报错?
我将非常感谢您的回复
KG
Tanya
也许这篇教程可以帮助您设置并确认您的环境
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
我还建议从命令行运行代码,因为 IDE 和笔记本可能会引入和隐藏错误。
Brownlee 博士,您好。
我看了这篇教程,有一个关于从二进制文件读取数据的问题?例如,我正在使用神经网络解决滑动拼图 n-puzzle 问题,但我似乎在获取二进制文件中的数据以及生成 n-puzzle 解决所需的移动次数方面遇到了麻烦。我不确定您是否遇到过这种情况,但任何帮助都将不胜感激。
抱歉,我不知道您的二进制文件。
也许在加载数据后,您可以将其转换为 numpy 数组,以便将其提供给神经网络?
感谢您的提示,我会尝试的。
非常非常感谢您提供所有精彩的教程。
如果我想在输入层之后添加批处理层,应该如何做?
因为我将此教程应用于不同的数据集和特征,我认为我需要进行归一化或标准化,并且我想以最简单的方式进行。
谢谢你,
我建议在拟合模型之前准备数据。
感谢分享如此精彩的教程,对我帮助很大。我想从上面的示例中打印混淆矩阵。还有另一个问题。
如果我有
20 个输入变量
1 个类标签(二元的)
和 400 个实例
我将如何知道,如何设置第一层、隐藏层和输出层的密集层参数。就像上面的示例中您放置的那样。12、8、1
我建议通过试错来配置隐藏层中的神经元数量,以了解哪种方法最适合您的特定问题。
C:\Users\zaheer\AppData\Local\Programs\Python\Python36\python.exe C:/Users/zaheer/PycharmProjects/PythonBegin/Bin-CLNCL-Copy.py
使用 TensorFlow 后端。
回溯(最近一次调用)
File “C:/Users/zaheer/PycharmProjects/PythonBegin/Bin-CLNCL-Copy.py”, line 28, in
model.fit(x_train , y_train , epochs=100, batch_size=100)
File “C:\Users\zaheer\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\models.py”, line 960, in fit
validation_steps=validation_steps)
File “C:\Users\zaheer\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py”, line 1574, in fit
batch_size=batch_size)
File “C:\Users\zaheer\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py”, line 1407, in _standardize_user_data
exception_prefix=’input’)
File “C:\Users\zaheer\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py”, line 153, in _standardize_input_data
str(array.shape))
ValueError: Error when checking input: expected dense_1_input to have shape (None, 20) but got array with shape (362, 1)
确保输入形状与您的数据匹配。
Jason 先生!您做得很好,这是一个非常简单的指南。
我正在尝试运行完全相同的代码,但有一个错误
str(array.shape))
ValueError: Error when checking target: expected dense_3 to have shape (None, 1) but got array with shape (768, 8)
如何解决?
我用的是 Windows 10 和 spyder。
很遗憾听到这个消息,也许可以确认您安装了最新版本的 Numpy 和 Keras?
运行此代码后,我将计算准确率,如何操作,我
我想将数据集划分为测试数据和训练数据
并评估模型并计算准确率
谢谢博士。
模型中有多少个隐藏层?
有 2 个隐藏层,1 个输入层和 1 个输出层。
您好。这个博客非常棒,就像 Adrian 的 pyimagesearch 博客一样。我有一个问题,那就是您是否有或将有关于 Keras 框架与 SSD 或 Yolo 架构的教程?
感谢您的建议,我希望将来会介绍它们。
感谢您提供的精彩文章。
我真的很喜欢
‘Machine Learning Mastery’!!
谢谢!
你好,Jason!
这是一篇很棒的文章!
我正在为大学的一门课程写一篇报告,并且在我的实现过程中使用了您的代码,是否可以在 bibtex 中引用这篇帖子?
谢谢!
当然,您可以直接引用网页。
我的问题是关于预测。我过去在预测数组中得到小数。突然,我开始只看到整数(0 或 1)。有什么想法可能导致了这种变化?
predictions = model.predict(X2)
predictions
Out[3]
array([[ 0.],
[ 0.],
[ 0.],
……,
[ 0.],
[ 0.],
[ 0.]], dtype=float32)
也许可以检查输出层的激活函数?
# 创建模型。使用 Dense 类定义全连接层
model = Sequential()
model.add(Dense(12, input_dim=len(x_columns), activation=’relu’)) #12个神经元,8个输入
model.add(Dense(8, activation=’relu’)) #具有8个神经元的隐藏层
model.add(Dense(1, activation=’sigmoid’)) #1个输出层。Sigmoid 给出 0/1
================== RESTART: /Users/apple/Documents/deep1.py ==================
使用 TensorFlow 后端。
回溯(最近一次调用)
File “/Users/apple/Documents/deep1.py”, line 20, in
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
File “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/keras/models.py”, line 826, in compile
**kwargs)
File “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/keras/engine/training.py”, line 827, in compile
sample_weight, mask)
File “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/keras/engine/training.py”, line 426, in weighted
score_array = fn(y_true, y_pred)
File “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/keras/losses.py”, line 77, in binary_crossentropy
return K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)
File “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py”, line 3069, in binary_crossentropy
logits=output)
TypeError: sigmoid_cross_entropy_with_logits() got an unexpected keyword argument ‘labels’
>>>
我没见过这个错误,抱歉。也许可以尝试发布到 stack overflow?
Janson 先生您好
安装好 Anaconda 和深度学习库后,我阅读了您的免费迷你课程,并尝试编写有关手写数字识别的代码。
我在 jupyter notebook 中编写了代码,我这样做对吗?
如果不对,我应该在哪里编写代码?
如果我想使用另一个数据集(我自己的数据集),如何在代码中使用它?
以及如何看到结果,例如准确率百分比?
我为我的简单问题感到非常抱歉!我写了很多“Matlab”代码,但我确实是 Python 和 Anaconda 的初学者,我的老师强迫我为我的项目使用 Python 和 Keras。
非常感谢您的帮助
笔记本可以。
您可以在 Python 脚本中编写代码,然后直接运行该脚本。
Janson 先生您好,再次
我从您的免费迷你课程中编写了以下代码用于手写数字识别,但在运行后遇到了语法错误
from keras.datasets import mnist
…
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)
from keras.utils import np_utils
…
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
model = Sequential()
model.add(Conv2D(32, (3, 3), padding=’valid’, input_shape=(1, 28, 28),
activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
File “”, line 2
2 model.add(Conv2D(32, (3, 3), padding=’valid’, input_shape=(1, 28, 28),
^
SyntaxError: invalid syntax
您能帮帮我吗?!
非常感谢
这个
应该是
感谢您提供精彩的博客和解释。我只有一个问题:我们如何获取模型的预测值。非常感谢
如下
感谢您的及时回复。我正在尝试学习 Keras 模型是如何工作的,并且我使用了。我像这样训练了模型
model.compile(loss=’mean_squared_error’, optimizer=’sgd’, metrics=[‘MSE’])
作为输出,我有以下几行
Epoch 10000/10000
10/200 [>………………………..] – ETA: 0s – loss: 0.2489 – mean_squared_error: 0.2489
200/200 [==============================] – 0s 56us/step – loss: 0.2652 – mean_squared_error: 0.2652
我的问题是,这两行(MSE 值)有什么区别?
它们应该是相同的。一个可能是在每个批次结束时计算的,另一个是在每个 epoch 结束时计算的。
你好
再次运行后出现错误
NameError Traceback (最近一次调用)
in ()
—-> 1 model = Sequential()
2 model.add(Conv2D(32, (3, 3), padding=’valid’, input_shape=(1, 28, 28), activation=’relu’))
3 model.add(MaxPooling2D(pool_size=(2, 2)))
4 model.add(Flatten())
5 model.add(Dense(128, activation=’relu’))
NameError: name ‘Sequential’ is not defined
您缺少导入。请确保您从结尾处的完整示例中复制了所有代码。
from keras.datasets import mnist
…
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)
from keras.utils import np_utils
…
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
model = Sequential()
2 model.add(Conv2D(32, (3, 3), padding=’valid’, input_shape=(1, 28, 28), activation=’relu’))
3 model.add(MaxPooling2D(pool_size=(2, 2)))
4 model.add(Flatten())
5 model.add(Dense(128, activation=’relu’))
6 model.add(Dense(num_classes, activation=’softmax’))
7 model.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
你好
请告诉我如何确定 tensorflow 和 keras 已正确安装在我的系统中。
也许是这样,因为我的 jupyter 中没有代码能运行。并且没有“import”能正常工作(例如 import pandas)
谢谢你
请看这篇文章
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
您好。我是一名机器学习新手,正在努力理解它。
我有一个问题,我还没有完全解决。而且我不知道从哪里开始。
我有一个字典,里面有几个键值对。键是一个从 0000 到 9999 的随机四位数。每个键的值如下设置:如果数字中的某个数字是 0、6 或 9,则其权重为 1,如果数字是 8,则其权重为 2,任何其他数字的权重为 0。然后将所有权重汇总,这就是键的值。(例如:{ ‘0000’: 4, ‘1234’: 0, ‘1692’: 2, ‘8800’: 6} – 以此类推)。
现在我正在尝试构建一个模型来预测给定键的正确值。(即,如果我输入 2222,答案是 0,如果我输入 9011 – 答案是 2)。我首先做的是创建一个包含 5 列的 CSV 文件,前四列是字典中拆分(按单个数字)的键,第五列是每个键的值。然后我创建了一个数据集并定义了一个模型(就像这篇教程一样,但 input_dim=4)。现在当我训练模型时,准确率不会超过约 30%。您的模型也基于二进制输出,而我的模型应该有一个介于 0 到 8 之间的整数。接下来该怎么办?
预先感谢您的所有努力!🙂
这篇帖子可能会帮助您将问题转化为预测建模问题
https://machinelearning.org.cn/how-to-define-your-machine-learning-problem/
有一件事我就是不明白。
一行数据的示例是 6,148,72,35,0,33.6,0.627,50,1
我猜最后一个数字是这个人是否有糖尿病(1)或没有(0),但我不明白的是我如何知道“预测”是关于那个 0 或 1 的,数据中有很多其他变量,我没有看到“糖尿病”是其中任何一个的标签。
那么,我怎么知道或如何设置要预测的变量(数字)呢?
您可以在您的应用程序或使用中解释预测。
模型并不关心输入和输出是什么,它会尽力而为。它本身并不关心糖尿病。
你好,
@Jason Brownlee,Keras Python 大师。
我正在开发一个面部识别测试,我成功使用了 Rprop,它对静态图像或面部图片效果很好,我也测试了 SVM 结果。
您认为 Keras 比 Rprop 更好或更强大吗?
因为我也考虑使用 Keras(1:1) 作为 Rprop(1:many) 的最终结果。
或者您认为哪个系统更好?
提前感谢您的建议。
我还听说,商业面部识别器之一的领导者使用 PNN(使用 libopenblas),所以我真的很想知道为我的最终论文和应用程序选择哪一个。
您说的 rprop 是什么意思?我认为它只是一个优化算法,而 Keras 是一个深度学习库。
https://en.wikipedia.org/wiki/Rprop
好的,我想我明白了。
我使用了 Accord.Net
Rprop 测试效果很好
MLR 测试效果很好
SVM 测试效果很好
RBM 测试效果很好
我使用了分类来处理面部图像
它们只适用于静态面部图片 100×100
但如果我使用来自它们的另一张图片,
这 4 个测试都失败了。
您认为如果我在图像面部识别中使用 Keras 会得到好的结果或好的预测吗?
因为如果 Keras 会有一个好的结果,那么我就必须使用 cesarsouza keras c#
https://github.com/cesarsouza/keras-sharp
感谢您的回复。
试试看吧。
模型拟合时得到的准确率与sklearn.metrics中的accuracy_score()有什么区别?它们具体是什么意思?
准确率是对所有预测中正确预测数量的总结。
它被用作模型在新的样本外数据上的技能估计。
天气预报能用RNN做吗?
不能。天气预报是通过在非常大的计算机上进行物理模拟的集合来完成的。
我们在拟合过程中没有预测任何东西(它只是一个训练,比如映射F(x)=Y)。
但仍然得到了准确率,这是什么准确率?
Epoch 1/150
768/768 [==============================] – 1s 1ms/step – loss: 0.6771 – acc: 0.6510
提前感谢你
预测是作为反向传播误差的一部分进行的。
嗨,Jason,
非常感谢您提供的精彩教程。我有几个问题想请教您:
1). 如何获得预测的分数?
2). 如何将predict运行的结果输出到一个文件中,并且输出按垂直顺序排列?
我看到您到处回答问题并帮助人们。您的时间和耐心非常宝贵!
查尔斯
您可以通过以下方式对模型进行预测
yhat = model.predict(X)
然后您可以将numpy数组结果保存到文件中。
您好,我刚刚完成了这个教程,但唯一的问题是,我们在结果中实际找到的是什么?也就是说,准确率和损失是什么意思,我们实际上在找出什么?
我刚接触神经网络,还不完全理解它们,如果您能回复,我将非常感激!
非常感谢。
Callum
准确率是模型技能,即正确预测的数量除以总预测数量。
损失是网络正在优化的函数,它应该是可微的并且与模型关注的度量相关,在本例中是用于分类的对数损失。
嗨,Jason,
首先,祝贺您完成出色的工作,我终于掌握了机器学习(希望如此,哈哈)。
因此,通过测试神经元数量和批次大小/时期数的更改,我达到了99.87%的准确率。
我使用的参数是
# 创建模型
model = Sequential()
model.add(Dense(240, input_dim=8, init=’uniform’, activation=’relu’))
model.add(Dense(160, init=’uniform’, activation=’relu’))
model.add(Dense(1, init=’uniform’, activation=’sigmoid’))
# 编译模型
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 拟合模型
model.fit(X, Y, epochs=1500, batch_size=100, verbose=2)
当我运行它时,我总是得到99.87%的准确率,我认为这是一个好现象,对吗?请告诉我我是否做错了什么,或者这是一个假阳性。
提前感谢,并为我的糟糕英语表示歉意😉
这个准确率很棒,总会有一些错误。
上面的例子非常好,先生。我想做一个在线购物电子产品价格变动预测项目。您能给我一些关于我项目的建议吗?您有没有使用神经网络进行价格预测的例子,请发链接给我,先生。
我建议遵循这个过程。
https://machinelearning.org.cn/start-here/#process
您好,这是一个非常有用的例子。但我仍然不明白为什么您加载
X = dataset[:,0:8]
Y = dataset[:,8]
如果我这样做
X = dataset[:,0:7] 它将无法工作
您可以在这里了解更多关于索引和切片numpy数组的信息
https://machinelearning.org.cn/index-slice-reshape-numpy-arrays-machine-learning-python/
感谢您的教程。
也许有人已经告诉过您了。数据集不再可用。
感谢您的提示,我会尽快修复。
非常感谢您提供的简洁示例!作为一个“感兴趣的业余爱好者”,我更有经验地对科学数据进行操作,而不是进行软件开发,这样简洁、高级的解释对我来说非常有帮助。我发现有时文档页面对我来说可能有点低级,即使我有多年的编程经验。这篇文章是我入门所需的一切,比其他“官方教程”更有帮助。
谢谢,Wesley,我很高兴听到您这么说。
感谢您的教程,但是数据集无法访问。请您修复一下。
谢谢,我会修复的。
你好
我找到了一个将我的图像数据转换为mnist格式的代码。但我遇到了一个错误,如下所示:
您能帮帮我吗?
import os
from PIL import Image
from array import *
from random import shuffle
# Load from and save to
Names = [[‘./training-images’,’train’], [‘./test-images’,’test’]]
for name in Names
data_image = array(‘B’)
data_label = array(‘B’)
FileList = []
for dirname in os.listdir(name[0])[1:]: # [1:] Excludes .DS_Store from Mac OS
path = os.path.join(name[0],dirname)
for filename in os.listdir(path)
if filename.endswith(“.png”)
FileList.append(os.path.join(name[0],dirname,filename))
shuffle(FileList) # Usefull for further segmenting the validation set
for filename in FileList
label = int(filename.split(‘/’)[2])
Im = Image.open(filename)
pixel = Im.load()
width, height = Im.size
for x in range(0,width)
for y in range(0,height)
data_image.append(pixel[y,x])
data_label.append(label) # labels start (one unsigned byte each)
hexval = “{0:#0{1}x}”.format(len(FileList),6) # number of files in HEX
# header for label array
header = array(‘B’)
header.extend([0,0,8,1,0,0])
header.append(int(‘0x’+hexval[2:][:2],16))
header.append(int(‘0x’+hexval[2:][2:],16))
data_label = header + data_label
# additional header for images array
if max([width,height]) <= 256
header.extend([0,0,0,width,0,0,0,height])
else
raise ValueError('Image exceeds maximum size: 256×256 pixels');
header[3] = 3 # Changing MSB for image data (0x00000803)
data_image = header + data_image
output_file = open(name[1]+'-images-idx3-ubyte', 'wb')
data_image.tofile(output_file)
output_file.close()
output_file = open(name[1]+'-labels-idx1-ubyte', 'wb')
data_label.tofile(output_file)
output_file.close()
# gzip resulting files
for name in Names
os.system('gzip '+name[1]+'-images-idx3-ubyte')
os.system('gzip '+name[1]+'-labels-idx1-ubyte')
FileNotFoundError Traceback (最近一次调用)
in ()
13
14 FileList = []
—> 15 for dirname in os.listdir(name[0])[1:]: # [1:] Excludes .DS_Store from Mac OS
16 path = os.path.join(name[0],dirname)
17 for filename in os.listdir(path)
FileNotFoundError: [WinError 3] The system cannot find the path specified: ‘./training-images’
看起来代码找不到您的图像。或许可以更改代码中的路径?
非常感谢您,先生,这是一个非常好的直观教程。
谢谢,很高兴对您有帮助。
我成功运行了一个用于欺诈检测的预测模型。我的数据集超过5000万条,并且还在增长。我遇到一个奇怪的问题。
当加载的数据量为1000万或更少时,我的预测是正常的。
一旦我加载了1100万条数据,我的预测就会饱和到一个特定值(比如0.48),并一直重复。也就是说,无论输入如何,所有预测都将是0.48。
我已经尝试了多种密集模型的组合。
# 创建模型
model = Sequential()
model.add(Dense(32, input_dim=4, activation=’tanh’))
model.add(Dense(28, activation=’tanh’))
model.add(Dense(24, activation=’tanh’))
model.add(Dense(20, activation=’tanh’))
model.add(Dense(16, activation=’tanh’))
model.add(Dense(12, activation=’tanh’))
model.add(Dense(8, activation=’tanh’))
model.add(Dense(1, activation=’sigmoid’))
也许应该检查一下是否需要对所有数据进行训练,通常一小部分样本就足够了。
哦。我相信机器学习的准确性会随着时间的推移和更多数据的获取而提高。
嗨,
如何定义隐藏层的数量和每层的神经元数量?
没有很好的启发式方法,试错法是一个好方法。找出最适合您特定数据的方法。
我执行了代码并得到了输出,但是如何在应用程序中使用这个预测?
这取决于应用程序。
值1.0和0..0代表什么意思??
在什么情况下?
如果输入有8个,为什么您在输入层使用了12个神经元?另外,为什么在输入层使用激活函数?
第一个隐藏层的神经元数量可以与输入层的神经元数量(例如输入特征的数量)不同。它们之间只有松散的关系。
你好先生,
神经网络是否使用标准化后的自变量值,还是我们在拟合和预测阶段应该输入标准化后的值?谢谢。
尝试两者,看看哪种最适合您的特定预测建模问题。
您好,我正在尝试使用一个包含2个输入的***数据集,当第一个层设置为Dense(4时,它只输出了NaN损失。但是当我将其减少到3时,我得到了有意义的损失输出。这是否与最大Dens值与输入的关系有关?
应该没有。这更可能与层的初始化方式有关,而不是与Dense层中的神经元数量有关。
您一直都很棒,这是一堂很棒的课。但说实话,我不知道它的意思
“\n%s: %.2f%%” % 以及为什么您在代码中使用数字(1)(model.metrics_names[1], scores[1]*100)?
这是Python的字符串格式化
https://pyformat.info/
Brownlee 博士,
当我们进行预测时,是否可以将测试数据集的每一行预测值放在同一行的旁边?我曾考虑过打印预测结果然后将其复制到Excel中,但我不确定Keras是否会保留顺序。您能帮我解决这个问题吗?非常感谢您的帮助!
是的,预测的顺序与输入值的顺序一致。
这有帮助吗?
深度学习是不是一种“黑魔法”?🙂
我之前曾为同一个数据集使用scikit-learn和机器学习,并尝试应用我在这里和书本上学到的所有技术,以获得76%的准确率。
我尝试了这个Keras教程,使用TensorFlow作为后端,并且第一次尝试就获得了80%的准确率 O_o
不,不是魔法,只是不同。
不过做得很好!
您能告诉我们列名吗?我认为这很重要,因为它帮助我们理解网络在评估和学习什么。
谢谢,
Manny
是的,它们列在这里
https://github.com/jbrownlee/Datasets/blob/master/pima-indians-diabetes.names
在执行 versions.py 时
我遇到了这个错误
回溯(最近一次调用)
File “versions.py”, line 2, in
import scipy
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\scipy\__init__.py”, line 61, in
from numpy import show_config as show_numpy_config
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\__init__.py”, line 142, in
from . import add_newdocs
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\add_newdocs.py”, line 13, in
from numpy.lib import add_newdoc
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\lib\__init__.py”, line 8, in
from .type_check import *
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\lib\type_check.py”, line 11, in
import numpy.core.numeric as _nx
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\core\__init__.py”, line 74, in
from numpy.testing import _numpy_tester
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\testing\__init__.py”, line 12, in
from . import decorators as dec
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\testing\decorators.py”, line 6, in
from .nose_tools.decorators import *
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\testing\nose_tools\decorators.py”, line 20, in
from .utils import SkipTest, assert_warns
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\numpy\testing\nose_tools\utils.py”, line 15, in
from tempfile import mkdtemp, mkstemp
File “C:\Users\ATIT GARG\Anaconda3\lib\tempfile.py”, line 45, in
from random import Random as _Random
File “C:\Users\ATIT GARG\random.py”, line 7, in
来自 keras.models import Sequential
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\keras\__init__.py”, line 3, in
from . import utils
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\keras\utils\__init__.py”, line 4, in
from . import data_utils
File “C:\Users\ATIT GARG\Anaconda3\lib\site-packages\keras\utils\data_utils.py”, line 23, in
from six.moves.urllib.error import HTTPError
ImportError: cannot import name ‘HTTPError’
您可能需要更新您的环境?
Jason – 非常令人印象深刻的工作!更令人印象深刻的是您对所有问题的详细回答。我全部看了一遍,学到了很多有用的信息。做得好!
谢谢,Gray!
你好 Jason,
感谢您的好教程!
您会如何命名/描述这个神经网络的结构?
问题在于,我觉得您可以拥有不同数量的输入和输入层中的神经元,这很奇怪。我见过的大多数神经网络图,每个输入都直接连接到一个输入层神经元。我从未见过输入数量与输入层神经元数量不同的神经网络图。
您有没有反例,或者是我有什么误解?
感谢您的工作和知识分享🙂
本文中的神经网络类型是多层感知机(MLP)。
代码中的第一个“层”实际上同时定义了输入层和第一个隐藏层。
输入的数量必须与输入数据的列数匹配。第一个隐藏层中的神经元数量可以是您想要的任何数字。
这有帮助吗?
Jason,非常感谢您的教程!这是我在互联网上找到的最好的教程。作为一个政治学***,我正在研究像这样复杂的***,我正在寻找允许更复杂关系的***。您的代码和帖子非常清晰;我能够比我预期的更容易地将其改编到我的目的。您这项***可能的一个延伸,也许是这个教程,是将层和节点映射到数据生成***的***。
谢谢Ashley,我很高兴它有帮助。
感谢您的建议。
我刚开始学习您的网站——感谢您提供的精彩资源!我想指出一个我认为是笔误的地方:在“定义模型”节之前的代码块中,我认为我们只需要 X = dataset[:,0:7],这样我们就不会将输出变量包含在输入中。
不,Eric,这是正确的。
X将有8列(0-7),原始***有9列。
您可以在这里了解更多关于Python中数组切片和范围的信息。
https://machinelearning.org.cn/index-slice-reshape-numpy-arrays-machine-learning-python/
很棒的教程,我终于找到了一个很好的深度学习网站(Y)。
谢谢。
很棒的教程,谢谢。我有一个项目,我需要在其中进行CAD图像(主要是3D机械图像分类)。您能给我一个如何进行的路线图吗?
我是新手,我不知道任何东西。
这是我的预测***的通用路线图。
https://machinelearning.org.cn/start-here/#process
非常感谢您,先生。这将帮助我继续前进。
很高兴听到这个消息。
感谢您提供教程,先生。
实际上我还有一些问题。
1. 这是反向传播神经网络吗?
2. 如何初始化Nguyen-Widrow随机权重?
3. 我有自己的数据集,每个数据集包含一个1x64的矩阵,哪个是正确的?我应该对它的每一列进行归一化,还是每一行进行归一化?
谢谢。
我是那个在“从零开始的反向传播”页面问您的人。
是的,它使用反向传播来更新权重。
抱歉,我不知道那种初始化方法,您可以在这里查看支持的方法。
https://keras.org.cn/initializers/
尝试一系列数据准备方案,看看哪种最适合您的特定数据集和选定的模型。
嗨,Jason,
这是一个很好的入门介绍,尽管这项技术令人望而生畏但又引人入胜!我想玩弄您的代码,看看我是否能提出一些简单的数据集并看看预测结果如何——一个我想到的想法是,我能否***一个预测电话号码属于哪个***的模型?因此,训练***看起来像一个2列的CSV,电话号码和***……这基本上是一个***。您认为这有效吗?还可以添加哪些***?我仍然会尝试一下,但很想听听您的任何想法/建议!
谢谢!
国家代码会让问题过于简单——例如,可以用查找表来解决。
是的,我只是想看看机器学习是否可以用于“找出”查找表,而不是由用户提供,只要有足够的数据……这不是一个实际的用例,而是一个学习练习。事实证明,我大约有700个电话号码的数据集对此并不有效。但再说一次,这是因为问题特征太少,例如,在我这里只有一类?如果我增加特征数量,比如电话号码、国家代码、电话号码所属的城市,甚至可能是电话号码注册的手机公司,您认为这会使训练更有效吗?
如果你能写一个 if 语句或者使用查找表来解决问题,那么它可能不适合机器学习。
这篇帖子将帮助您构建问题
https://machinelearning.org.cn/how-to-define-your-machine-learning-problem/
谢谢 Jason 的资源。我会去看看的。我还找到了这个(https://elitedatascience.com/machine-learning-projects-for-beginners),我正在阅读,供任何正在寻找小型 ML 问题来解决作为学习经验的人参考。
很棒。
很棒的教程,非常有帮助,然后我有一个问题。在 8 个输入中,哪个占的比例最大?我们在数据集中有 8 个因素,如怀孕次数、血糖、血压和其他因素。那么,哪个因素与糖尿病最相关?我们如何通过 MLP 知道这个比例?
谢谢!
我们可能不知道。这是描述性模型和预测性模型之间的区别。
这确实是模型可解释性问题,我在这里写了更多关于它的内容
https://machinelearning.org.cn/faq/single-faq/how-do-i-interpret-the-predictions-from-my-model
嗨,Jason,
谢谢您的教程。
我有一个问题,您在 pandas 中也使用了 keras 吗?在这种情况下,用 numpy 导入数据是否更好?您有什么建议?
再次感谢您,
Paolo
是的,是的。
怎么会这样?我通常看到 pandas.readcsv() 来读取文件。keras 只接受 numpy 数组吗?
正确。
感谢您出色的教程。我有一个信用卡数据集,我想对其进行欺诈检测。它有 312 列,所以在进行 DNN 之前,我应该先进行降维,然后使用 DNN 吗?另一个问题是,我的数据集是否也可以使用 CNN?
谢谢你
是的,选择最能映射到输出变量的特征。
如果数据具有空间关系,例如在空间或时间上的交易序列,则可以使用 CNN。
感谢您的回答,所以我觉得 CNN 对我的数据集没有意义,
您有主动学习的教程吗?
感谢您的时间。
我不知道是否合适,我当时是想提供足够的信息供您自己判断。
我希望将来能涵盖主动学习。
是的,我明白了,我根据您提供的信息说的,非常感谢您的回答和出色的教程。
您能分享一个关于多标签支持的第一个神经网络教程吗?
感谢您的建议。
如何在 keras 中创建卷积层并可视化特征
好问题,抱歉,我没有实际的例子。
亲爱的 Jason,
我收到一个错误“ValueError: could not convert string to float: “请帮忙解决这个问题。我正在使用自己的数据集,其中包含文本而不是数字(如您使用的数据集)。
谢谢!
这可能会给你一些想法
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
亲爱的 Jason,
我正在运行您教程第 6 部分的代码示例。但在以下代码片段中出现了一个错误
代码片段
dataset = numpy.loadtxt(“pima_indians.csv”, delimiter=”,”)
# 分割为输入 (X) 和输出 (Y) 变量
X = dataset[:,0:8]
Y = dataset[:,8]
错误
ValueError: could not convert string to float: “6
请指导我解决这个问题。感谢您的宝贵时间。
听到这个消息我很难过,我这里有一些建议可能有所帮助
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
您找到解决方案了吗?因为我也遇到了同样的错误?
你好医生,在这段 Python 代码中,我应该在哪里获取“keras”包?
本教程展示了如何安装 Keras
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
嗨 Jason,感谢您发布的精彩博文。我有一个问题,我们能否将密集层用作文本分类的输入(例如:电影评论的情感分类)。如果可以,我们如何将文本数据集转换为密集层的数值?
可以,尽管通常的做法是对文本进行独热编码或使用嵌入层。
我在博客上都有示例。
感谢您的宝贵时间。先生,您的意思是,我首先使用嵌入层作为输入层,然后使用密集层作为隐藏层吗?
是的。
你好,谢谢你的教程。我想知道你如何为每一层设置神经元数量和激活函数,例如第一层 12 个神经元,第二层 8 个。
我做了一些尝试和错误。
你好 jason,
我开发了两个使用 keras 的神经网络,但我收到了这个错误
line 1336, in _do_call
raise type(e)(node_def, op, message)
ResourceExhaustedError: OOM when allocating tensor with shape[7082368,50]
[[Node: training_1/Adam/Variable_14/Assign = Assign[T=DT_FLOAT, _class=[“loc:@training_1/Adam/Variable_14″], use_locking=true, validate_shape=true, _device=”/job:localhost/replica:0/task:0/device:GPU:0”](training_1/Adam/Variable_14, training_1/Adam/zeros_14)]]
您有什么想法吗?
谢谢。
抱歉,我以前没见过这个错误。也许可以试试在 stackoverflow 上发布/搜索?
先生,我有一个与回归相关的数据集,其中包含 49999 行和 20 列的数组,我想在此数据集上实现 CNN。
我按照我的理解把代码放上去了,请给我一些建议,如何纠正它,我主要在放置我的密集维度时遇到了麻烦
来自 keras.models import Sequential
from keras.layers import Dense
import numpy as np
import tensorflow as tf
from matplotlib import pyplot
from sklearn.datasets import make_regression
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.preprocessing import StandardScaler
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras.optimizers import SGD
seed = 7
np.random.seed(seed)
from scipy.io import loadmat
dataset = loadmat(‘matlab2.mat’)
Bx=basantix[:, 50001:99999]
Bx=np.transpose(Bx)
Fx=fx[:, 50001:99999]
Fx=np.transpose(Fx)
from sklearn.cross_validation import train_test_split
Bx_train, Bx_test, Fx_train, Fx_test = train_test_split(Bx, Fx, test_size=0.2, random_state=0)
scaler = StandardScaler() # Class is create as Scaler
scaler.fit(Bx_train) # Then object is created or to fit the data into it
Bx_train = scaler.transform(Bx_train)
Bx_test = scaler.transform(Bx_test)
model = Sequential()
def base_model()
keras.layers.Dense(Dense(49999, input_shape=(20,), activation=’relu’))
model.add(Dense(20))
model.add(Dense(49998, init=’normal’, activation=’relu’))
model.add(Dense(49998, init=’normal’))
model.compile(loss=’mean_squared_error’, optimizer = ‘adam’)
return model
scale = StandardScaler()
Bx = scale.fit_transform(Bx)
Bx = scale.fit_transform(Bx)
clf = KerasRegressor(build_fn=base_model, nb_epoch=100, batch_size=5,verbose=0)
clf.fit(Bx,Fx)
res = clf.predict(Bx)
## line below throws an error
clf.score(Fx,res)
抱歉,我无法为您调试代码。也许可以将您的代码和错误发布到 stackoverflow?
嗨,Jason,
看了数据集,我发现有很多属性,每个属性的单位都不同。为什么您没有重新缩放/标准化数据?但仍然设法获得了 75% 的准确率?
理想情况下,我们应该重新缩放数据。
relu 激活函数在未缩放数据方面更灵活。
好的,谢谢。
此外,我实现了一个与此类似的数据库上的 NN,其准确率在 70-75% 之间变化。我尝试通过调整各种参数和函数(学习率、层数、每层神经元数、早停、激活函数、初始化、优化器等)来提高准确率,但没有成功。我的问题是,我什么时候才知道我达到了最大可能的准确率?我是否应该满足于当前的准确率?
当我们用完时间和想法时。
我在这里列出了一些想法
https://machinelearning.org.cn/machine-learning-performance-improvement-cheat-sheet/
还有这里
https://machinelearning.org.cn/improve-deep-learning-performance/
首先,感谢您的教程。我也承认这个网络更多是用于教育目的。但是,通过标准的归一化处理,这个网络的准确率可以提高到 83-84%。通过使用更深层的模型,也可以达到 93-95% 的准确率。
#标准归一化
X= StandardScaler().fit_transform(X)
#以及一个更深层的模型
model = Sequential()
model.add(Dense(12, input_dim=8, activation=’relu’))
model.add(Dense(12, activation=’relu’))
model.add(Dense(12, activation=’relu’))
model.add(Dense(12, activation=’relu’))
model.add(Dense(12, activation=’relu’))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation=’sigmoid’))
谢谢,是的,在使用神经网络时,归一化通常是一个好主意。
你好,感谢这篇精彩的文章
想象一下,在我的数据集中,糖尿病不是 0 或 1,而是有 3 个结果,我的意思是,数据行如下所示
data1, data2, sickness
123, 124, 0
142, 541, 0
156, 418, 1
142, 541, 1
156, 418, 2
所以,我需要对 3 个值进行分类。如果我使用您给我们的这个示例,我该如何确定输出?
输出将是 Alex 的病情。也许我不理解你的问题?
是的,输出将是病情。
抱歉我的英语,它不是我的母语,我将重新问我的问题。我的意思是,我将有一个标签有超过 2 个结果,0 是一种疾病,1 是另一种,2 是另一种。
我该如何使用您向我们展示的模型来拟合这 3 个结果?
我明白了,这被称为多类别分类问题。
这个教程会有帮助
https://machinelearning.org.cn/multi-class-classification-tutorial-keras-deep-learning-library/
是否可以预测彩票结果。如果可以,如何预测?
不。我在这里解释更多
https://machinelearning.org.cn/faq/single-faq/can-i-use-machine-learning-to-predict-the-lottery
你好 Jason,我在本教程中运行了第一个示例代码。但让我困惑的是
为什么最终的训练准确率 (0.7656) 与同一数据集(训练集)的评估分数(78.26%)不同?我弄不明白。您能告诉我吗?非常感谢!
第 150 周期/150
768/768 [==============================] – 0s – loss: 0.4827 – acc: 0.7656
32/768 [>………………………..] – ETA: 0s
acc: 78.26%
一个是训练集的性能,另一个是验证集的性能。
您可以在这里了解更多关于差异的信息
https://machinelearning.org.cn/difference-test-validation-datasets/
感谢您的快速回复。但我注意到在您的代码中,训练集和验证集是完全相同的数据集。请检查以确认。代码在“6. Tie It All Together”部分。
# 拟合模型
model.fit(X, Y, epochs=150, batch_size=10)
# 评估模型
scores = model.evaluate(X, Y)
所以,我的问题仍然是:为什么最终的训练准确率(0.7656)与同一数据集的评估分数(78.26%)不同?
谢谢!
也许详细输出可能是针对每个批次累积的,而不是在训练周期结束时总结技能。
你好 Jason,
您是否有关于使用 CNN 进行信号处理的教程?我有一些生物医学信号(如 ECG)的 csv 文件,并且我想使用深度学习对正常和异常信号进行分类。
此致
是的,我计划在此主题上发布一套教程。它们应该很快就会出来。
你好,非常感谢你的教程。我正在尝试制作一个神经网络,它将接收一个数据集并返回它是否适合我的另一个程序进行分析。是否可以将可接受的数据集和不可接受的数据集馈送给它,然后调用新数据集并返回该数据集是否可接受?感谢您的帮助,我是一名机器学习新手。
试试看你会怎么样。
真的吗!非常感谢。您可以在我发布教程时通知我吗?因为我正在做一个项目,我现在卡住了。
此致
如果您能提供网络图,显示单个节点和图边(以及偏置节点和激活函数),并在图上指示哪些部分是由哪些 model.add 命令/参数生成的,这将对新手非常有帮助。类似于 https://zhu45.org/posts/2017/May/25/draw-a-neural-network-through-graphviz/
我尝试使用 from keras.utils.plot_model 和 tensorboard 进行可视化,但两者都没有生成节点级别的图。
感谢您的建议。
谁能告诉我一个在 GPU 上运行我的 ann keras tensorflow 后端 的简单方法。谢谢
我知道的最简单的方法
https://machinelearning.org.cn/develop-evaluate-large-deep-learning-models-keras-amazon-web-services/
您在这里使用了反向传播吗?
是的。
您能否制作一个关于卷积神经网络的教程?那将非常有帮助……:)
是的,我已经在博客上有很多了。尝试搜索博客。
我有一个问题,我的结果如下所示
Epoch 146/150 – 0s – loss: -1.2037e+03 – acc: 0.0000e +00
Epoch 147/150 – 0s – loss: -1.2037e+03 – acc: 0.0000e +00
Epoch 148/150 – 0s – loss: -1.2037e+03 – acc: 0.0000e +00
Epoch 149/150 – 0s – loss: -1.2037e+03 – acc: 0.0000e +00
Epoch 150/150 – 0s – loss: -1.2037e+03 – acc: 0.0000e +00
而我的数据集中输出的值在 0 到 500 之间,而不是只有 0 和 1。
那么如何在我的代码中修复这个问题?
这听起来像是一个回归问题。将输出层的激活函数更改为线性,并将损失函数更改为“mse”。
请看这个教程
https://machinelearning.org.cn/regression-tutorial-keras-deep-learning-library-python/
太棒了!!!非常感谢。
不客气,很高兴能帮到您。
嗨,Jason,
感谢您的教程。我刚接触机器学习,目前正在处理一个非二元分类问题。
我的数据集包含一些带标签的样本——所有样本都测量相同的数量/单位。通常,典型的训练集有 10 到 20 个带标签的样本/输入。然而,前馈或测试样本将只包含 7 个输入(随机的)。
我正在努力寻找一个解决方案来设计一个系统,该系统接受的输入少于训练集中典型的输入。
也许可以尝试遵循这个过程
https://machinelearning.org.cn/start-here/#process
这里有一个很棒的教程!但模型的关键方面是预测样本。如果我打印第一个预测值,它会为分类特征的所有列显示一些值。如何从样本中获取预测数字?
预测的顺序与输入的顺序相匹配。
我认为我一定做错了什么,我一直收到错误
File “C:\Users\glens\Anaconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py”, line 519, in __exit__
c_api.TF_GetCode(self.status.status))
InvalidArgumentError: Input to reshape is a tensor with 10 values, but the requested shape has 1
[[Node: training_19/Adam/gradients/loss_21/dense_64_loss/Mean_1_grad/Reshape = Reshape[T=DT_FLOAT, Tshape=DT_INT32, _class=[“loc:@training_19/Adam/gradients/loss_21/dense_64_loss/Mean_1_grad/truediv”], _device=”/job:localhost/replica:0/task:0/device:GPU:0″](training_19/Adam/gradients/loss_21/dense_64_loss/mul_grad/Sum, training_19/Adam/gradients/loss_21/dense_64_loss/Mean_1_grad/DynamicStitch/_1703)]]
您能否阐明为什么我会收到此错误?
谢谢您
我没有遇到过这个错误,我这里有一些建议
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
Jason,感谢您这个很棒的教程。我有一个疑问——为什么评估没有产生100%的准确率?毕竟,我们使用了与训练数据相同的评估数据集。
好问题!
我们是在近似一个具有挑战性的映射函数,而不是记忆样本。因此,总会有误差。
我在这里解释了更多
https://machinelearning.org.cn/faq/single-faq/why-cant-i-get-100-accuracy-or-zero-error-with-my-model
我该如何预测我想预测的东西,比如新数据?例如,我做了一个垃圾邮件检测,但不知道如何预测我写的句子是否是垃圾邮件。
您可以使用已完成的模型调用`model.predict()`。更多信息请看这里
https://machinelearning.org.cn/faq/single-faq/how-do-i-make-predictions
你好先生,
我是新手,理解了您代码的一部分。我对预测模型有疑问,基本上我们将数据分成训练集和测试集。在上面的例子中,整个数据集都被用作训练数据集。我们如何训练模型在训练集上,并使用它来进行测试集的预测?
问得好,是的,在所有可用数据上训练模型,然后用它来开始进行预测。
更多信息在这里
https://machinelearning.org.cn/train-final-machine-learning-model/
你好先生,
这是一个很棒的教程,帮助我理解。但是,我是新手,想弄明白一些事情。在上面的代码中,我们将整个数据集视为训练集。我们能把它分成训练集和测试集,将模型应用于训练集,并使用它进行测试集预测吗?如何在上面的代码中实现?
谢谢。
是的,您可以手动分割数据集,也可以使用scikit-learn来帮您分割。我在这里解释得更详细
https://machinelearning.org.cn/faq/single-faq/how-do-i-evaluate-a-machine-learning-algorithm
嗨,Jason,
我正在尝试使用我的神经网络进行预测。我在训练数据时使用了特征中的`MinMaxScaler`。如果我在预测数据集上不使用与训练数据特征相同的转换函数,我就无法得到好的预测。您能在这方面给我一些建议吗?
您必须使用相同的转换函数来准备训练数据和对新数据进行预测。
谢谢!
你好,我是新手,我在spyder中写了以下代码
来自 keras.models import Sequential
from keras.layers import Dense
import numpy
# 设置随机种子以保证结果可复现
numpy.random.seed(7)
# 加载皮马印第安人糖尿病数据集
dataset = numpy.loadtxt(“pima-indians-diabetes.txt”,encoding=”UTF8″, delimiter=”,”)
# 分割为输入 (X) 和输出 (Y) 变量
X = dataset[:,0:8]
Y = dataset[:,8]
# 创建模型
model = Sequential()
model.add(Dense(12, input_dim=8, activation=’relu’))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation=’sigmoid’))
# 编译模型
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 拟合模型
model.fit(X, Y, epochs=150, batch_size=10)
# 评估模型
scores = model.evaluate(X, Y)
print(“\n%s: %.2f%%” % (model.metrics_names[1], scores[1]*100))
我得到了以下输出
runfile(‘C:/Users/DELL/Anaconda3/Scripts/temp.py’, wdir=’C:/Users/DELL/Anaconda3/Scripts’)
使用 TensorFlow 后端。
回溯(最近一次调用)
File “”, line 1, in
runfile(‘C:/Users/DELL/Anaconda3/Scripts/temp.py’, wdir=’C:/Users/DELL/Anaconda3/Scripts’)
File “C:\Users\DELL\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 668, in runfile
execfile(filename, namespace)
File “C:\Users\DELL\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”, line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File “C:/Users/DELL/Anaconda3/Scripts/temp.py”, line 1, in
来自 keras.models import Sequential
File “C:\Users\DELL\Anaconda3\lib\site-packages\keras\__init__.py”, line 3, in
from . import utils
File “C:\Users\DELL\Anaconda3\lib\site-packages\keras\utils\__init__.py”, line 6, in
from . import conv_utils
File “C:\Users\DELL\Anaconda3\lib\site-packages\keras\utils\conv_utils.py”, line 9, in
from .. import backend as K
File “C:\Users\DELL\Anaconda3\lib\site-packages\keras\backend\__init__.py”, line 89, in
from .tensorflow_backend import *
File “C:\Users\DELL\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py”, line 5, in
import tensorflow as tf
File “C:\Users\DELL\Anaconda3\lib\site-packages\tensorflow\__init__.py”, line 22, in
from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
File “C:\Users\DELL\Anaconda3\lib\site-packages\tensorflow\python\__init__.py”, line 49, in
from tensorflow.python import pywrap_tensorflow
File “C:\Users\DELL\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 74, in
raise ImportError(msg)
ImportError: 回溯(最近一次调用)
File “C:\Users\DELL\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 14, in swig_import_helper
return importlib.import_module(mname)
File “C:\Users\DELL\Anaconda3\lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
文件 "", 第 994 行, 在 _gcd_import 中
文件 "", 第 971 行, 在 _find_and_load 中
文件 "", 第 955 行, 在 _find_and_load_unlocked 中
文件 "", 第 658 行, 在 _load_unlocked 中
文件 "", 第 571 行, 在 module_from_spec 中
文件 "", 第 922 行, 在 create_module 中
文件 "", 第 219 行, 在 _call_with_frames_removed 中
ImportError: DLL load failed with error code -1073741795
处理上述异常时,发生了另一个异常
回溯(最近一次调用)
File “C:\Users\DELL\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 58, in
from tensorflow.python.pywrap_tensorflow_internal import *
File “C:\Users\DELL\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 17, in
_pywrap_tensorflow_internal = swig_import_helper()
File “C:\Users\DELL\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 16, in swig_import_helper
return importlib.import_module('_pywrap_tensorflow_internal')
File “C:\Users\DELL\Anaconda3\lib\importlib\__init__.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: 没有名为 '_pywrap_tensorflow_internal' 的模块
未能加载原生 TensorFlow 运行时。
请参阅 https://tensorflowcn.cn/install/install_sources#common_installation_problems
了解一些常见原因和解决方案。寻求帮助时请包含整个堆栈跟踪
此错误消息上方。
我推荐这个教程来帮助您设置环境
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
我建议您不要使用IDE或Notebook
https://machinelearning.org.cn/faq/single-faq/why-dont-use-or-recommend-notebooks
相反,我建议您将代码保存到.py文件中,并在命令行中运行
https://machinelearning.org.cn/faq/single-faq/how-do-i-run-a-script-from-the-command-line
先生,请提供自适应神经模糊分类器的Python代码
感谢您的建议。
我也在等它。
祝您一切顺利,先生。
您能给我一些关于OCR系统的想法吗?作为我的毕业设计项目,请给我一个OCR的后端策略,您有OCR代码吗?
也许从这里开始
使用卷积神经网络和 Python Keras 进行手写数字识别
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
那句话出现了一个语法错误,可能是什么原因?
我在这里有一些建议
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
你好 Jason,
我安装了theano后端。我使用的是Windows操作系统,在执行过程中我遇到了一个错误:“No module named TensorFlow”。请帮忙。
您可能需要更改Keras的配置以使用Theano。
更多细节在此
https://keras.org.cn/backend/
嗨,Jason,
请问,如何计算此示例的精确率和召回率?
谢谢。
您可以使用scikit-learn的度量标准。
https://scikit-learn.cn/stable/modules/classes.html#sklearn-metrics-metrics
我一直认为sigmoid和softmax是相当相似的激活函数。但当我尝试在最后一个层使用softmax作为激活函数而不是sigmoid时,我的准确率差了很多。
您觉得这合理吗?如果合理,为什么?我觉得在其他代码中我更常看到softmax而不是sigmoid。
不。
Sigmoid用于2个类别。
Softmax用于>2个类别
我正在开发一个模型,用于预测客户流失的可能性。我的数据集有70000行和500列,请问我如何将数值数据作为输入传递给卷积神经网络(CNN)?
CNN仅适用于具有空间关系的数据,例如图像、时间序列和文本。
嗨,杰森,
我正在使用TensorFlow作为后端。
来自 keras.models import Sequential
from keras.layers import Dense
import sys
from keras import layers
from keras.utils import plot_model
print (model.layer())
错误。
—————————————————————————
AttributeError Traceback (最近一次调用)
in
9 model.add(Dense(512, activation=’relu’))
10 model.add(Dense(10, activation=’sigmoid’))
—> 11 print (model.layer())
12 # Compile model
13 model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
AttributeError: ‘Sequential’ object has no attribute ‘layer’
你为什么要打印`model.layer()`?
嗨 Jason
首先,感谢您提供如此精彩的教程。由于您的脚本使用的是值列表,而我的输入是24x20的矩阵列表,这些矩阵根据测量顺序填充了3个参数在3000个周期中的值,我该如何输入这种矩阵数据,或者说,我该如何输入我从原始数据集中提取的3个参数的图像流?我应该如何修改这个脚本以便我可以使用我的数据集?
当使用MLP处理图像时,您必须将每个像素数据矩阵展平成一个单一的行向量。
嗨,Jason,
感谢教程。1个问题。
我将此算法用于时间序列预测,0=买,1=卖。这个模型是否会过拟合?
只有在您尝试拟合并评估训练集和验证集上的学习曲线时,您才能知道。
先生,教程很棒。
有没有办法可视化keras中创建的模型(即神经网络的基本结构,带有节点层和它们之间的连接)的不同层?
是的,看看这个教程
https://machinelearning.org.cn/visualize-deep-learning-neural-network-model-keras/
感谢这篇教程。
在我尝试编译和拟合模型时遇到了一个问题。它返回了ValueError:ValueError: could not convert string to float: ’24, 26, 99, 31, 623, 863, 77, 32, 362, 998, 1315, 33, 291, 14123, 39, 8, 335, 2308, 349, 403, 409, 1250, 417, 47, 1945, 50, 188, 51, 4493, 3343, 13419, 6107, 84, 18292, 339, 9655, 22498, 1871, 782, 1276, 2328, 56, 17633, 24004, 24236, 1901, 6112, 22506, 26397, 816, 502, 352, 24238, 18330, 7285, 2160, 220, 511, 17680, 68, 5137, 26398, 875, 542, 354, 2045, 555, 2145, 93, 327, 26399, 3158, 7501, 26400, 8215′ 。
您能帮帮我吗。
也许您的数据中包含一个字符串?
数据包含“user, number_of_followers, list_of_followers, number_of_followee, list_of_followee, number_of_mentions, list_of_user_mentioned…”
列表中的值用逗号分隔。
例如:“36 ; 3 ; 52,3,87 ; 5 ; 63,785,22,11,6 ; 0 ; “
你好,有没有关于使用LSTM解决pima-indians-diabetes.csv进行预测的帖子?
没有。LSTM仅用于序列数据,而Pima Indians数据集不是一个序列预测问题。
有没有办法使用数据集中的特定字段而不是整个上传的数据集?
谢谢。
是的,字段是数据集矩阵中的列,您可以删除那些您不想用作模型输入的列。
非常感谢!这很有帮助
很高兴听到它很有帮助。
回溯(最近一次调用)
File “C:/Users/Admin/PycharmProjects/NN/nnt.py”, line 119, in
rounded = [round(X[:1]) for x in predictions]
File “C:/Users/Admin/PycharmProjects/NN/nnt.py”, line 119, in
rounded = [round(X[:1]) for x in predictions]
TypeError: type numpy.ndarray doesn’t define __round__ method
请帮帮我
谢谢你。
也许可以确保您的库是最新的?
这个可能会有帮助
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
嗨,Jason,
感谢您提供的精彩教程。我正在使用Tensorflow后端在keras中构建一个自编码器模型。
我需要在模型中使用Tensorflow(例如tf.ifft,tf.fft)函数。您能指导我如何做到这一点吗?我尝试使用lambda层,但使用它时准确率会下降。
此外,我正在使用`model.predict()`函数来检查中间层之间的值。我这样做对吗?
此外,您能指导我如何在keras中使用`reshape`函数吗?
谢谢你的帮助
抱歉,我不知道您使用的函数。也许可以在stackoverflow上发帖?
嗨,Jason,
您的教程太棒了,感谢您将这一切整理好。
在本教程中,结果是1或0,但如果您有超过两个可能结果的数据,例如0、1、2或类似情况,该怎么办?
我是否可以对您在这里提供的代码做些什么,还是需要完全不同的方法?
我通过使用您的“第一个机器学习项目”中的KNN模型,在某种程度上实现了我想要做的事情,但我不得不简化我的数据,去除了一些变量。我认为这些额外的变量是有价值的,所以认为神经网络可能有用,但就像我说的,我有三种分类而不是两种。
谢谢。
是的,这是一个关于多类别分类与神经网络的例子
https://machinelearning.org.cn/multi-class-classification-tutorial-keras-deep-learning-library/
太棒了,谢谢。
你好,我正在尝试使用复数作为输入来构建一个神经网络,我遵循了您的建议,但出现了一个警告
`
ComplexWarning: Casting complex values to real discards the imaginary part return array(a, dtype, copy=False, order=order)
代码可以正常运行,但预测的准确率只有25%。
在神经网络中使用复数是否可能?
您有什么建议吗?
我认为Keras API不支持复数作为输入。
您有什么处理复数的建议吗?
手头没有,抱歉。
也许可以在Keras用户组发帖,看看是否有人遇到过这种情况。
https://machinelearning.org.cn/get-help-with-keras/
嗨,Jason,
我正在尝试运行教程中的代码,做了一些小的修改,但在训练时遇到了问题。
训练损失和准确率在每个epoch都保持不变(请看下面的代码片段和输出)。这是针对另一个数据集,而不是糖尿病数据集。
我尝试使用https://stackoverflow.com/questions/37213388/keras-accuracy-does-not-change 提供的建议来解决这个问题。
但问题依然存在。
您能帮我看看并解决这个问题吗?谢谢。
CODE and OUTPUT Snippets
# 创建模型
model = Sequential()
model.add(Dense(15, input_dim=9, activation=’relu’))
model.add(Dense(10, activation=’relu’))
model.add(Dense(5, activation=’relu’))
model.add(Dense(1, activation=’sigmoid’))
# 编译模型
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 拟合模型
model.fit(xTrain, yTrain, epochs=500, batch_size=10)
第 1/200 纪元
81/81 [==============================] – 0s 177us/step – loss: -8.4632 – acc: 0.4691
Epoch 2/200
81/81 [==============================] – 0s 148us/step – loss: -8.4632 – acc: 0.4691
Epoch 3/200
81/81 [==============================] – 0s 95us/step – loss: -8.4632 – acc: 0.4691
Epoch 4/200
81/81 [==============================] – 0s 116us/step – loss: -8.4632 – acc: 0.4691
Epoch 5/200
81/81 [==============================] – 0s 106us/step – loss: -8.4632 – acc: 0.4691
Epoch 6/200
81/81 [==============================] – 0s 98us/step – loss: -8.4632 – acc: 0.4691
Epoch 7/200
81/81 [==============================] – 0s 145us/step – loss: -8.4632 – acc: 0.4691
Epoch 8/200
81/81 [==============================] – 0s 138us/step – loss: -8.4632 – acc: 0.4691
Epoch 9/200
81/81 [==============================] – 0s 105us/step – loss: -8.4632 – acc: 0.4691
Epoch 10/200
81/81 [==============================] – 0s 128us/step – loss: -8.4632 – acc: 0.4691
Epoch 11/200
81/81 [==============================] – 0s 129us/step – loss: -8.4632 – acc: 0.4691
Epoch 12/200
81/81 [==============================] – 0s 111us/step – loss: -8.4632 – acc: 0.4691
Epoch 13/200
81/81 [==============================] – 0s 106us/step – loss: -8.4632 – acc: 0.4691
Epoch 14/200
81/81 [==============================] – 0s 144us/step – loss: -8.4632 – acc: 0.4691
Epoch 15/200
81/81 [==============================] – 0s 106us/step – loss: -8.4632 – acc: 0.4691
Epoch 16/200
81/81 [==============================] – 0s 180us/step – loss: -8.4632 – acc: 0.4691
Epoch 17/200
81/81 [==============================] – 0s 125us/step – loss: -8.4632 – acc: 0.4691
Epoch 18/200
81/81 [==============================] – 0s 183us/step – loss: -8.4632 – acc: 0.4691
Epoch 19/200
81/81 [==============================] – 0s 149us/step – loss: -8.4632 – acc: 0.4691
Epoch 20/200
81/81 [==============================] – 0s 146us/step – loss: -8.4632 – acc: 0.4691
Epoch 21/200
81/81 [==============================] – 0s 206us/step – loss: -8.4632 – acc: 0.4691
Epoch 22/200
81/81 [==============================] – 0s 135us/step – loss: -8.4632 – acc: 0.4691
Epoch 23/200
81/81 [==============================] – 0s 116us/step – loss: -8.4632 – acc: 0.4691
Epoch 24/200
81/81 [==============================] – 0s 135us/step – loss: -8.4632 – acc: 0.4691
Epoch 25/200
81/81 [==============================] – 0s 121us/step – loss: -8.4632 – acc: 0.4691
Epoch 26/200
81/81 [==============================] – 0s 110us/step – loss: -8.4632 – acc: 0.4691
Epoch 27/200
81/81 [==============================] – 0s 104us/step – loss: -8.4632 – acc: 0.4691
Epoch 28/200
81/81 [==============================] – 0s 122us/step – loss: -8.4632 – acc: 0.4691
Epoch 29/200
81/81 [==============================] – 0s 117us/step – loss: -8.4632 – acc: 0.4691
Epoch 30/200
81/81 [==============================] – 0s 111us/step – loss: -8.4632 – acc: 0.4691
Epoch 31/200
81/81 [==============================] – 0s 123us/step – loss: -8.4632 – acc: 0.4691
Epoch 32/200
81/81 [==============================] – 0s 116us/step – loss: -8.4632 – acc: 0.4691
Epoch 33/200
81/81 [==============================] – 0s 120us/step – loss: -8.4632 – acc: 0.4691
Epoch 34/200
81/81 [==============================] – 0s 156us/step – loss: -8.4632 – acc: 0.4691
Epoch 35/200
81/81 [==============================] – 0s 131us/step – loss: -8.4632 – acc: 0.4691
Epoch 36/200
81/81 [==============================] – 0s 122us/step – loss: -8.4632 – acc: 0.4691
Epoch 37/200
81/81 [==============================] – 0s 110us/step – loss: -8.4632 – acc: 0.4691
Epoch 38/200
81/81 [==============================] – 0s 121us/step – loss: -8.4632 – acc: 0.4691
Epoch 39/200
81/81 [==============================] – 0s 123us/step – loss: -8.4632 – acc: 0.4691
Epoch 40/200
81/81 [==============================] – 0s 111us/step – loss: -8.4632 – acc: 0.4691
Epoch 41/200
81/81 [==============================] – 0s 115us/step – loss: -8.4632 – acc: 0.4691
Epoch 42/200
81/81 [==============================] – 0s 119us/step – loss: -8.4632 – acc: 0.4691
Epoch 43/200
81/81 [==============================] – 0s 115us/step – loss: -8.4632 – acc: 0.4691
Epoch 44/200
81/81 [==============================] – 0s 133us/step – loss: -8.4632 – acc: 0.4691
Epoch 45/200
81/81 [==============================] – 0s 114us/step – loss: -8.4632 – acc: 0.4691
Epoch 46/200
81/81 [==============================] – 0s 112us/step – loss: -8.4632 – acc: 0.4691
Epoch 47/200
81/81 [==============================] – 0秒 143微秒/步 – loss: -8.4632 – acc: 0.4691
Epoch 48/200
81/81 [==============================] – 0秒 124微秒/步 – loss: -8.4632 – acc: 0.4691
Epoch 49/200
81/81 [==============================] – 0s 129us/step – loss: -8.4632 – acc: 0.4691
Epoch 50/200
其余的 epoch 也是如此。
我有一些建议可能会有所帮助
https://machinelearning.org.cn/improve-deep-learning-performance/
嗨,Jason,
请告知我,我们是否可以绘制图形(epoch vs acc)?
如果可以,怎么画。
我在这里展示如何做
https://machinelearning.org.cn/display-deep-learning-model-training-history-in-keras/
太棒了,谢谢!
我只是想知道,第二章中描述了“init”参数,但在所有来源中都缺少它。
我添加了它,例如
model.add(Dense(12, input_dim=8, init=’uniform’ ,activation=’relu’))
然后我收到了这个警告
pima_diabetes.py:25: UserWarning: Update your
Dense
call to the Keras 2 API:Dense(12, input_dim=8, activation="relu"
, kernel_initializer="uniform")
model.add(Dense(12, input_dim=8, init=’uniform’ ,activation=’relu’))
我的解决方案是改用“kernel_initializer”
model.add(Dense(12, input_dim=8, activation=”relu”, kernel_initializer=”uniform”))
关于同一行,我有一个问题:是否正确地添加了一个具有 8 个神经元的输入层和另一个具有 12 个神经元的隐藏层?
那么,这样做是否会得到相同的 ANN?
model.add(Dense(8, input_dim=8, kernel_initializer=’uniform’))
model.add(Dense(8, activation=”relu”, kernel_initializer=’uniform’))
是的,也许您看到的书本版本已过时,请给我发邮件以获取最新版本?
是的,第一个隐藏层的定义也通过参数定义了输入层。
嗨 Jason
我遇到了以下错误:
(env) shuja@latitude:~$ python keras_test.py
使用 TensorFlow 后端。
回溯(最近一次调用)
File “keras_test.py”, line 8, in
dataset = numpy.loadtxt(“pima-indians-diabetes.csv”, delimiter=”,”)
File “/home/shuja/env/lib/python3.6/site-packages/numpy/lib/npyio.py”, line 955, in loadtxt
fh = np.lib._datasource.open(fname, ‘rt’, encoding=encoding)
File “/home/shuja/env/lib/python3.6/site-packages/numpy/lib/_datasource.py”, line 266, in open
return ds.open(path, mode, encoding=encoding, newline=newline)
File “/home/shuja/env/lib/python3.6/site-packages/numpy/lib/_datasource.py”, line 624, in open
raise IOError(“%s not found.” % path)
OSError: pima-indians-diabetes.csv not found.
看起来数据集没有下载并放在脚本的同一目录中。
嗨,Jason
谢谢您的教程。
您是否有好的参考或示例,我可以学习如何设置“对抗性神经网络”?
Shubham
目前还没有,我希望将来会涵盖这个主题。
嗨,Jason,
我一直在阅读您关于各种机器学习主题的教程,并且我认为您的写作非常清晰简洁。感谢您使我遇到的几乎所有主题都易于理解。
但是,我注意到的一件事是,您网页上的评论部分有时会占据整个网页的大部分。我第一次看到这个网站的前几次,我看到我的滚动条很小,并假设教程将是 15 页长,结果却发现您的介绍确实如您所承诺的那样“温和”,而页面开头之外的部分都是人们的回复以及您的回复。我认为如果您能以某种方式压缩回复(也许是一个“显示回复”按钮?)以便只显示实际内容,那将非常有帮助。这不仅会让一切看起来更好,而且我认为它还可以防止人们一开始就认为您的博客非常长,就像我过去几次一样。
非常好的反馈,谢谢 Daniel。我将看看是否有好的 WordPress 插件可以实现这一点。
不起作用,为什么
很遗憾听到您遇到麻烦,具体是什么问题?
在机器学习方面做得非常出色……我正在思考如何开始我的机器学习之旅,我在 LinkedIn 上随机搜索机器学习领域的人,就这样我来到了这里……我很高兴看到这个……这里是我开始构建机器学习的最终目的地。感谢您接受我在 LinkedIn 上的连接。
我有一个项目要开始,但我不知道如何开始以及路线图。请给我详细的指导。
这是主题
人类活动识别系统,控制儿童和成人的超重问题。
听起来是个很棒的项目,你可以在这里开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
您能解释一下为什么我们在第一层使用 12 个神经元吗?8 个是输入,其余 4 个是偏置吗?
不,12 指的是第一个隐藏层的 12 个节点,而不是输入层。
输入层通过第一个隐藏层上的 input_dim 参数定义。
我在这里解释了更多
https://machinelearning.org.cn/faq/single-faq/how-do-you-define-the-input-layer-in-keras
感谢您的及时回复。我的疑问已经解决了。
很高兴听到这个消息。
嗨 Jason,上面的预测值在 0 到 1 之间,我的标签是 1,1,1,2,2,2,3,3,3……36,36,36。
现在我想预测类别 36,我该怎么办?
你到底遇到了什么问题?
嗨,Jason,
我正在学习 NLP,在理解深度学习中的 NLP 时遇到困难。
请问,您能帮助我将以下 N:N 转换为 N:1 模型吗?
我想将我的 vec_y 从 max_input_words_amount 长度更改为 1。
我应该如何定义层并使用 LSTM 或 RNN 或……?
谢谢。
x=df1[‘Question’].tolist()
y=df1[‘Answer’].tolist()
max_input_words_amount = 0
tok_x = []
for i in range(len(x))
tokenized_q = nltk.word_tokenize(re.sub(r”[^a-z0-9]+”, ” “, x[i].lower()))
max_input_words_amount = max(len(tokenized_q), max_input_words_amount)
tok_x.append(tokenized_q)
vec_x=[]
for sent in tok_x
sentvec = [ft_cbow_model[w] for w in sent]
vec_x.append(sentvec)
vec_y=[]
for sent in y
sentvec = [ft_cbow_model[sent]]
vec_y.append(sentvec)
for tok_sent in vec_x
tok_sent[max_input_words_amount-1:]=[]
tok_sent.append(ft_cbow_model[‘_E_’])
for tok_sent in vec_x
if len(tok_sent)<max_input_words_amount
for i in range(max_input_words_amount-len(tok_sent))
tok_sent.append(ft_cbow_model['_E_'])
for tok_sent in vec_y
tok_sent[max_input_words_amount-1:]=[]
tok_sent.append(ft_cbow_model['_E_'])
for tok_sent in vec_y
if len(tok_sent)<max_input_words_amount
for i in range(max_input_words_amount-len(tok_sent))
tok_sent.append(ft_cbow_model['_E_'])
vec_x=np.array(vec_x,dtype=np.float64)
vec_y=np.array(vec_y,dtype=np.float64)
x_train,x_test, y_train,y_test = train_test_split(vec_x, vec_y, test_size=0.2, random_state=1)
model=Sequential()
model.add(LSTM(output_dim=100,input_shape=x_train.shape[1:],return_sequences=True, init='glorot_normal', inner_init='glorot_normal', activation='sigmoid'))
model.add(LSTM(output_dim=100,input_shape=x_train.shape[1:],return_sequences=True, init='glorot_normal', inner_init='glorot_normal', activation='sigmoid'))
model.add(LSTM(output_dim=100,input_shape=x_train.shape[1:],return_sequences=True, init='glorot_normal', inner_init='glorot_normal', activation='sigmoid'))
model.add(LSTM(output_dim=100,input_shape=x_train.shape[1:],return_sequences=False, init='glorot_normal', inner_init='glorot_normal', activation='sigmoid'))
model.compile(loss='cosine_proximity', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, nb_epoch=100,validation_data=(x_test, y_test),verbose=0)
我很乐意回答问题,但我没有能力审查您的代码,抱歉。
Jason – 我认为您确实是网上教授这些概念的最佳老师。您是否会发表一篇关于图卷积的文章?也许可以研究一下 Kipf 和 Welling 2016 GCN (https://arxiv.org/abs/1609.02907) 论文的概念,或者(理想情况下)一个在 Keras 中应用到图网络问题的实际示例,也许使用 Spektral,即最近的图卷积 Keras 库 (https://github.com/danielegrattarola/spektral) – 我将非常感激,并且随着图机器学习的兴起,例如根据这篇 DeepMind 论文 (https://arxiv.org/abs/1806.01261),我相信会有很多很棒的应用和人们的兴趣,但网上没有多少容易理解的内容。非常感谢您的期待。
谢谢。
感谢您的建议。
嗨 Jason
非常感谢您的示例,它们非常清晰。您是否有 RBF 神经网络在 Python 中的实现?
目前还没有,抱歉。
您在 github 上有此模型的更新的 python 代码吗?我正在愉快地学习模型,但在进行数据分割和模型拟合步骤时,所需的库加载有所不同。
谢谢
你到底遇到了什么问题?
嗨!Jason Brownlee,
我尝试在 Jupyter Notebook 中实现模型。
但是当我尝试运行时,一个错误消息显示“module ‘tensorflow’ has no attribute ‘get_default_graph'”,用于编译 model = Sequential()。我尝试了很久来解决它。但未能解决。
您能帮助我吗?
我建议从命令行而不是从 notebook 运行代码,方法如下:
https://machinelearning.org.cn/faq/single-faq/how-do-i-run-a-script-from-the-command-line
嗨,Jason,
超级教程!
如果我运行 Your First Neural Network 一次,然后在同一 python 会话中(不重置 seed)重复运行几次,仅使用此代码
model.fit(X, Y, epochs=150, batch_size=10, verbose=0)
scores = model.evaluate(X, Y)
print(“\n%s: %.2f%%” % (model.metrics_names[1], scores[1]*100))
那么我平均可以获得大约 3% 的准确率提升(范围 77.85% – 83.07%)。显然,初始化值得益于之前的运行。
在运行几次后找到的最佳拟合模型是否有意义?这可以提供近 5% 的准确率提升!
或者我们是否过拟合了?
是的,请看这篇文章
https://machinelearning.org.cn/faq/single-faq/why-do-i-get-different-results-each-time-i-run-the-code
(base) C:\Users\Roger\Documents\Python Scripts>python firstnn.py
使用 Theano 后端。
回溯(最近一次调用)
File “firstnn.py”, line 14, in
model.add(Dense(12, input_dim=8, activation=’relu’))
File “C:\Users\Roger\Anaconda3\lib\site-packages\keras\engine\sequential.py”, line 165, in add
layer(x)
File “C:\Users\Roger\Anaconda3\lib\site-packages\keras\engine\base_layer.py”, line 431, in __call__
self.build(unpack_singleton(input_shapes))
File “C:\Users\Roger\Anaconda3\lib\site-packages\keras\layers\core.py”, line 866, in build
constraint=self.kernel_constraint)
File “C:\Users\Roger\Anaconda3\lib\site-packages\keras\legacy\interfaces.py”, line 91, in wrapper
return func(*args, **kwargs)
File “C:\Users\Roger\Anaconda3\lib\site-packages\keras\engine\base_layer.py”, line 249, in add_weight
weight = K.variable(initializer(shape),
File “C:\Users\Roger\Anaconda3\lib\site-packages\keras\initializers.py”, line 218, in __call__
dtype=dtype, seed=self.seed)
File “C:\Users\Roger\Anaconda3\lib\site-packages\keras\backend\theano_backend.py”, line 2600, in random_uniform
return rng.uniform(shape, low=minval, high=maxval, dtype=dtype)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\sandbox\rng_mrg.py”, line 872, in uniform
rstates = self.get_substream_rstates(nstreams, dtype)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\configparser.py”, line 117, in res
return f(*args, **kwargs)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\sandbox\rng_mrg.py”, line 779, in get_substream_rstates
multMatVect(rval[0], A1p72, M1, A2p72, M2)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\sandbox\rng_mrg.py”, line 62, in multMatVect
[A_sym, s_sym, m_sym, A2_sym, s2_sym, m2_sym], o, profile=False)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\compile\function.py”, line 317, in function
output_keys=output_keys)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\compile\pfunc.py”, line 486, in pfunc
output_keys=output_keys)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\compile\function_module.py”, line 1841, in orig_function
fn = m.create(defaults)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\compile\function_module.py”, line 1715, in create
input_storage=input_storage_lists, storage_map=storage_map)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\link.py”, line 699, in make_thunk
storage_map=storage_map)[:3]
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\vm.py”, line 1091, in make_all
impl=impl))
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\op.py”, line 955, in make_thunk
no_recycling)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\op.py”, line 858, in make_c_thunk
output_storage=node_output_storage)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\cc.py”, line 1217, in make_thunk
keep_lock=keep_lock)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\cc.py”, line 1157, in __compile__
keep_lock=keep_lock)
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\cc.py”, line 1609, in cthunk_factory
key = self.cmodule_key()
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\cc.py”, line 1300, in cmodule_key
c_compiler=self.c_compiler(),
File “C:\Users\Roger\Anaconda3\lib\site-packages\theano\gof\cc.py”, line 1379, in cmodule_key_
np.core.multiarray._get_ndarray_c_version())
AttributeError: (‘The following error happened while compiling the node’, DotModulo(A, s, m, A2, s2, m2), ‘\n’, “module ‘numpy.core.multiarray’ has no attribute ‘_get_ndarray_c_version'”)
我遵循了设置环境的所有步骤,但在运行代码时遇到了一个属性错误“module ‘numpy.core.multiarray’ has no attribute ‘_get_ndarray_c_version’”
也许可以尝试在 stackoverflow 上搜索/发布?
哎呀,也许 numpy 没有正确安装?
不,numpy 1.16.2 与当前 Anaconda 提供的 theano 1.0.3 不兼容。我降级到了 numpy 1.13.0。
谢谢 Roger。
嗨,Jason,
感谢这个精彩的示例!
我在示例中观察到的是使用的数据库是纯数字的。
我的疑问是
如何修改示例以处理分类输入?
如果输入是 One Hot 编码,它会起作用吗?
是的,您可以使用 one hot 编码来处理输入的分类变量。
您能提供一个好的 OHE 在 Python 中的参考点吗?
提前致谢!:)
当然
https://machinelearning.org.cn/why-one-hot-encode-data-in-machine-learning/
我阅读了链接,它很有帮助。现在,我有一个关于我的网络的特定疑问。
我有 3 个分类输入,它们的大小不同。一个有大约 15 个“类别”,而另外两个有 5 个。所以在我对它们进行 One Hot 编码后,我是否必须通过填充使它们的大小相同?或者它会按原样工作?
您可以对每个变量进行编码然后将它们连接成一个向量。
或者您可以有一个模型,其中每个变量都有一个输入,并让模型将它们连接起来。
你好,
如果有一个自变量(例如国家)有超过 100 个标签,该如何解决?
我认为仅使用 one hot 编码将无法工作,也包括缩放。
有什么替代方案吗?
您可以尝试
– 整数编码
– One hot 编码
– 嵌入
测试每种方法,看看哪种最适合您的特定数据集。
你好 jason,
非常感谢您的帖子,对我帮助很大。
1. 如何添加混淆矩阵?
2. 如何更改学习率?
祝您一切顺利 Martin
添加混淆矩阵
https://machinelearning.org.cn/custom-metrics-deep-learning-keras-python/
调整学习率
https://machinelearning.org.cn/understand-the-dynamics-of-learning-rate-on-deep-learning-neural-networks/
嗨,杰森,
我训练了一个具有 6 个月数据的神经网络模型,并在远程站点进行了部署,
当收到新数据用于未来几个月时,
是否有任何方法可以自动更新模型,并在其中添加新的训练数据?
是的,也许最简单的方法是在新数据上或在所有可用数据上重新训练模型。
你好 jason,
我想打印出神经网络得分作为其中一个变量的函数,我该怎么做?
此致
Shubham
也许可以尝试线性激活单元和 mse 损失函数?
先生,我正在使用 Python 中的 sklearn.neural_network.MLPClassifier。现在我想给分类器我自己的初始权重。我该怎么做?请帮帮我。提前致谢
抱歉,我没有这方面的例子。
也许可以尝试在 stackoverflow 上发布?
感谢您的回复
数据归一化可以将准确率提高到 90% 以上。
https://stackoverflow.com/questions/39525358/neural-network-accuracy-optimization
感谢分享。
尊敬的先生,
我想将上面共享的示例应用于“train_test_split”生成的数组,但它不起作用,因为这些数组不是 numpy 格式的。
我给你提供详细信息,我有一个“XYZ”数据集。该数据集具有以下规格
总图片数 = 630
每张图片提取了2500个特征。每个特征都是浮点类型。
总类别数 = 7
现在,在处理完特征文件后,我在以下变量中得到了结果
XData:以二维数组形式包含特征数据(行:630,列:2500)
YData:以一维数组形式包含原始类别标签(行:630,列:1)
因此,使用以下代码,我将数据集分割为训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(XData, YData, stratify=YData, test_size=0.25)
现在,我想将博客上分享的深度学习示例应用于我的数据集,该数据集现在是以数组形式存在的,并生成测试数据预测和准确率的输出。
你能告诉我有什么方法可以处理上述数组吗?
是的,Keras模型可以直接操作numpy数组。
也许我没有完全理解您遇到的问题?
尊敬的先生,
谢谢,我已将我的数组转换为numpy格式。
现在,我遵循了您关于多分类问题的教程(https://machinelearning.org.cn/multi-class-classification-tutorial-keras-deep-learning-library/),并使用了以下代码
############################################################
import pandas
来自 keras.models import Sequential
from keras.layers import Dense
来自 keras.wrappers.scikit_learn 的 KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
seed=5
totalclasses=7 #类别标签是:“p1”, “p2”, “p3”, “p4”, “p5”, “p6”, “p7”
totalimages=630
totalfeatures=2500 #从图像生成的特征
#数据已从特征文件导入,结果是两个数组XData和YData
#XData包含的不是numpy数组形式的特征数据集
#YData包含的不是numpy数组形式的标签
# 将类别值编码为整数
encoder = LabelEncoder()
encoder.fit(YData)
encoded_Y = encoder.transform(YData)
# 将整数转换为虚拟变量(即独热编码)
dummy_y = np_utils.to_categorical(encoded_Y)
# 定义基线模型
def baseline_model()
# 创建模型
model = Sequential()
model.add(Dense(8, input_dim=totalfeatures+1, activation=’relu’))
model.add(Dense(totalclasses, activation=’softmax’))
# 编译模型
model.compile(loss=’categorical_crossentropy’, optimizer=’adam’, metrics=
‘accuracy’])
return model
estimator = KerasClassifier(build_fn=baseline_model, nb_epoch=200, batch_size=5, verbose=0)
x_train, x_test, y_train, y_test = train_test_split(XData, dummy_y, test_size=0.25, random_state=seed)
x_train = np.array(x_train)
x_test = np.array(x_test)
y_train = np.array(y_train)
y_test = np.array(y_test)
estimator.fit(x_train, y_train)
predictions = estimator.predict(x_test)
print(predictions)
print(encoder.inverse_transform(predictions))
########################################################
代码没有生成语法错误。
现在,我想问
1.我是否正确地应用了深度学习(神经网络模型)?
2.我如何计算准确率、混淆矩阵和分类报告?
3.您能否推荐我还可以将哪些其他类型的深度学习算法应用于此类问题?
在应用了不同的深度学习算法后,我想比较它们的准确率,就像您在教程 https://machinelearning.org.cn/machine-learning-in-python-step-by-step/ 中通过绘制图表进行比较一样。
抱歉,我没有精力审查你的代码。
这篇帖子展示了如何计算指标。
https://machinelearning.org.cn/how-to-calculate-precision-recall-f1-and-more-for-deep-learning-models/
我建议尝试一系列方法,以便找到最适合您特定数据集的方法。
https://machinelearning.org.cn/faq/single-faq/what-algorithm-config-should-i-use
嗨,Jason,
很棒的教程。我现在正在尝试 UCI 档案中的新数据集。但是,当数据不完整时,我遇到了问题。那里不是数字,而是一个“?”,表示数据缺失或未知。所以我得到了
ValueError: could not convert string to float: ‘?’
有没有办法忽略这些数据?我确信许多数据集都有这个问题,其中包含缺失的数据。
提前感谢!
是的,您可以将缺失数据替换为该变量的平均值或中位数,至少作为起点。
您能否为相同的数据提供 GUI 代码,例如从网站或 Android 应用程序调用 ANN 模型?
我看不出为什么不。
尊敬的先生
ValueError: Error when checking input: expected conv2d_5_input to have 4 dimensions, but got array with shape (250, 250, 3)
我收到了这个错误
我执行了哪些步骤
original_image->resized to same resolution->converted to numpy array ->saved and loaded to x_train -> fed into network model ->modal.fit(x_train .. getting this error
或许可以从这个图像分类教程开始
https://machinelearning.org.cn/how-to-develop-a-convolutional-neural-network-to-classify-photos-of-dogs-and-cats/
谢谢您的回复,先生 🙂
在此之后,我在 model.fit 时遇到 list index out of range 错误。
很遗憾听到这个消息,我在这里有一些建议可能会有帮助。
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
尊敬的Jason博士,
感谢您的本教程。
我一直在调整层数和神经元数量。
在当前代码中
我尝试增加第一层的数量。
结果是准确率并没有提高多少。
增加层数有所提高。
当每一层都有大量神经元时,准确率有所提高。
这并非唯一的例子,但尝试以下代码
准确率达到了91.1%。
我添加了另外两个层。
准确率略有下降至88%。
从这些初步实验来看,增加神经元数量,如您第一个示例所示,并未提高准确率。
然而,增加层数,尤其是带有大量神经元的层,确实将准确率提高到了大约91%。
但是,如果层数过多,准确率会略微下降到88%。
我的问题是,有没有办法将准确率提高到91%以上?
谢谢你,
悉尼的Anthony
如果是 Pima Indians 数据集,那么通过 10 折交叉验证的最佳准确率约为 78%,任何更高的值都可能是过拟合。
是的,我有很多关于诊断模型问题和提高性能的教程,您可以从这里开始。
https://machinelearning.org.cn/start-here/#better
尊敬的Jason博士,
进一步实验,我尝试了以下代码
通过调整神经元数量,先增加后减少,我获得了 95% 的准确率。
我无法系统地提高准确率。
谢谢你,
悉尼的Anthony
哈哈,是的。这正是神经网络的巨大未解之谜(没有好的理论来配置它们),这就是为什么我们必须使用经验方法。
尊敬的Jason博士,
感谢您的回复。
是的,正如本教程所述,这是 Pima Indian 数据集。
在我进一步阅读 10 折交叉验证之前,请简要回答
* 过拟合是什么意思。
* 为什么 96% 的准确率被认为是过拟合。
去做
尝试简单的函数,并尝试本教程,然后查看过拟合。
例如,假设我们有 x = 0, 1, 2, 3, 4, 5 和 f(x) = x^2
目标
* 看看对于 x = 0..5 是否存在 x 和 f(x) 的准确映射。
* 看看当我们预测 x = 6, 7, 8 时会发生什么。会是 36, 49, 64 吗?
* 我们想知道是否存在过拟合模型。
谢谢你,
悉尼的Anthony
过拟合是指在训练集上表现更好,但测试集表现更差。
它也可能意味着在测试/验证集上表现更好,但在新数据上表现更差。
根据我的经验,该数据集的上限是 77-78%,因为我在过去大约 20 年的教程中都处理过它。
嗨,Jason,
我看到数据没有为训练和测试进行划分。为什么会这样?在这种情况下,预测意味着什么?
Andrey
这可能意味着结果有点过于乐观。
我这样做是为了让这个例子非常简单易懂。
尊敬的Jason博士,
我尝试为 x = [0,1,2,3,4,5] 的确定性模型 fx = x**2 这样做。
我想看看机器学习如何处理确定性函数。
但我只得到 16.67% 的准确率。
这是基于本教程的代码。
我们知道 fx = x**2 是可预测的。我需要做什么?
谢谢你,
悉尼的Anthony
也许你需要数十万个例子?
也许模型需要针对您的问题进行调整,例如,也许使用 mse 损失和输出层中的线性激活函数,因为这是一个回归问题。
尊敬的Jason博士,
我尝试了 mse 损失和线性激活函数,但仍然只获得了 1% 的准确率。
但是,我得到了这个
我想映射一个确定性函数,看看机器学习是否能在没有公式的情况下找出 f(x)。
准确率不是回归问题的有效指标。
https://machinelearning.org.cn/faq/single-faq/how-do-i-calculate-accuracy-for-regression
你非常接近了!
另外,尝试更多的数据集。数百或数千个。
尊敬的Jason博士,
我从程序中删除了 model.evaluate。但仍然没有得到预期的值与实际值令人满意的匹配。
输出
尚未获得预期值和实际值之间的匹配
谢谢你,
悉尼的Anthony
也许模型架构(层和节点)需要调整?
也许学习率需要调整?
也许您需要更多的训练示例?
也许您需要更多的或更少的训练轮数?
…
更多想法在这里
https://machinelearning.org.cn/start-here/#better
尊敬的Jason博士,
我找不到系统的方法来找到机器学习算法使用它来计算确定性方程的方法,例如 y = f(x),其中 f(x) = x**2。
我仍然有麻烦。我将把这个问题发布到这个页面上。本质上是 (i) 添加/删除层,(ii) 调整训练轮数,(iii) 调整 batch_size。但我还没有接近成功。
另外,使用 model.predict 函数而不是 model.predict_classes。
这是删除了大部分注释掉的行的程序。
输出如下:
无论我如何调整每层的神经元数量、层数、训练轮数和批次大小,“predicted”都呈现出算术级数,而不是几何级数。
注意,预测值中连续项的差值 tn+1 – tn 对所有预测值都为 81。
但是,我们知道 y = f(x) 中连续项之间的差值并不相同。
例如,在非线性关系如 f(x) = x**2 中,f(x) = 0, 1, 2, 4, 9, 16, 25, 36,项之间的差值为:1, 1, 2, 5, 7, 9, 11,即 tn+1 – tn != tn+2 – tn+1。
因此,在不知道公式的情况下,如何让机器学习算法计算 f(x) 仍然是个难题。
这是解决方案,希望有所帮助
我想你也可以对预测值进行 inverse_transform() 来恢复到原始单位。
尊敬的Jason博士,
非常感谢您的回复。我得到了一个 mse,数量级为 3 x 10**-6。
尽管如此,我还是会研究这个程序,并自己学习 (i) MinMaxScaler 以及我们为什么使用它,(ii) fit_transform(y),以及 (iii) 一个具有 10 个神经元的隐藏层。我还需要学习激活函数和损失函数的选择。Keras 网站有一个关于损失函数的章节,网址是 https://keras.org.cn/losses/,但看看 Python 的“IDLE”程序,从 keras 导入 losses,有很多损失函数是编译模型所必需的。
此外,预测值需要重新计算才能恢复到其未缩放的值。所以我也会查找“rescaling”。
再次感谢您,
Anthony, 悉尼, 新南威尔士州
是的,您可以使用 inverse_transform 来取消预测值的缩放,正如我之前提到的。
尊敬的Jason博士,
我知道如何使用 inverse_transform 函数
首先应用 MinMaxScaler 将其缩放到 0 到 1
如果我们想重新构建 x 和 y,很简单
x_s 和 y_s 存储了原始数据(转换前)的最小值和最大值。
但是,如何将 yhat 转换回其原始尺度,因为它没有经过 inverse_transform 函数处理?
如果我依赖于 y_s.inverse_transform(yhat),你得到的是
我“希望”得到一些接近原始值的东西。
但是 yhat 在开始时并没有使用 MinMaxScaler。
我需要重写我自己的函数吗?
谢谢,
Anthony of Sydney NSW
模型预测的是缩放后的值,直接对 yhat 应用 inverse transform。
尊敬的Jason博士,
我就是这样做的,直接应用 yhat 的 inverse transform,但得到的是这些结果
代码精简版
我不明白如何获得 yhat 的逆转换,因为我不知道“未转换”的值,因为我没有估计它。
谢谢你,
悉尼的Anthony
您可以对 y 和 yhat 进行 inverse transform 并绘制两者。
尊敬的Jason博士,
我再次尝试了一下,以说明尽管预测值拟合了 f(x) 的缩放后的预测值和预期值的抛物线,但当“反缩放”回原始值时,结果似乎相当荒谬。
代码 - 相关部分
结果输出
当我绘制 (x, yhat) 和 (x,f(x)) 时,绘图结果符合预期。但是当我将 yhat 重新缩放回来时,所有未缩放的 yhat 值都为 1030.0833,这非常奇怪。
为什么?
谢谢你,
Anthony of Sydney NSW
尊敬的Jason博士,
我打印了 yhat,它们都一样。
尽管如此,(x, yhat) 缩放值的绘图看起来像一个抛物线。
注意:这是在缩放之前。
然而,尽管缩放后的值 (x,yhat) 和 (x, y) 的图表符合预期,但 yhat 的值却是一样的。
我不明白。您期望 yhat 和 f(x) 相似。
我希望能得到答复。
谢谢你,
悉尼的Anthony
抱歉,我没有能力进一步调试您的示例。希望您能理解。
尊敬的Jason博士,
我在 https://datascience.stackexchange.com/questions/61223/reconstituting-estimated-predicted-values-to-original-scale-from-minmaxscaler 上提了这个问题,希望那里有答案。
谢谢
Anthony Of Sydney
这是解决方案
缺失的三行是
尊敬的Jason博士,
我得出的结论是,肯定存在一个 bug,不是在您的解决方案中,也不是在我的解决方案中。我认为这是由于语言的较低层实现中的 bug 引起的。
我打印了 yhat、f(x) 实际值和 x 的缩放版本,得到了这个结果。
注意:yhat 的缩放版本的值是相同的。
也就是说:
尽管 (x, yhat) 和 (x, f(x) 的绘图成功,
yhat 的缩放输出的前 10 个值是相同的,
也就是说,如果我们绘制 (x, yhat),我们会得到一条直线,但绘图结果是一个抛物线。
当我们执行以下转换时
对于未缩放的 yhat 值,我们仍然遇到了相同的错误。第二列是 f(x),第三列是 x。
结论:这既不是您解决方案的程序错误,也不是我的解决方案的程序错误。我认为这可能是较低层实现的问题。
为什么我对这件事如此“执着”:因为如果我有更复杂的模型,我想看到重新缩放的预测/yhat 值。
我不知道 StackExchange 上是否有人能提供见解。
感谢您的时间,祝您一切顺利。
悉尼的Anthony
我认为这是正确的,考虑到它是一个指数,模型决定它可以为了高端的正确性而牺牲低端的正确性——鉴于 MSE 的降低。
试将示例数量从 1K 更改为 100,然后手动查看所有 100 个值——您就会明白我的意思。
这一切都是一个很好的练习,干得好。
尊敬的Jason博士,
我重新做了这个问题,并取得了很好的结果!
我无法解释为什么我得到了准确的结果,我本应得到准确的结果,但它们肯定是一个改进。
重新缩放的原始值和拟合值产生了 RMS 为 0.0。
这是代码,变量名略有更改。
它奏效了,重新缩放的 yhat 的结果符合预期,但无法解释为什么之前的会“疯了”。需要对此进行更多实验。
尽管如此,我的下一个项目是使用确定性函数进行 k-fold 采样,以查看重采样数据 fold 中的间隙是否能提供准确的预测,尽管每个 fold 中的采样是随机的。
谢谢你,
悉尼的Anthony
尊敬的Jason博士,
抱歉,我认为 RMS 是“不切实际的”。我有一个编程错误。
尽管如此,我还是重新做了一遍,结果仍然令人满意。
总而言之,重新缩放的 yhat 产生了更接近原始值的结果。重新缩放的 yhat 的较低值似乎很奇怪。
尽管如此,底部的值需要更现实一些,即使重新缩放的 x 和重新缩放的 y,以及重新缩放的 x 和重新缩放的 yhat 的图看起来很接近。
需要在批次大小、周期和优化器上进行更多研究。
接下来,将对确定性函数进行 k-fold 采样,以查看重采样数据 fold 中的间隙是否能提供准确的预测,尽管每个 fold 中的采样是随机的。
再次为上一篇文章中的错误表示歉意。
悉尼的Anthony
干得好。
尊敬的Jason博士,
一位名叫“Serali”的粒子物理学家在“StackExchange”上回复了我,并建议我打乱原始数据。在这种情况下,数据打乱与 k-fold 中的打乱无关。根据贡献者,结果应该会提高。来源:https://datascience.stackexchange.com/questions/61223/reconstituting-estimated-predicted-values-to-original-scale-from-minmaxscaler
代码与我正在实验的代码完全相同。所以,我将展示开头必要的代码来打乱数据,并在最后取消打乱。
开头的打乱代码
最后的代码被“取消打乱”/排序,以显示实际值和预测值之间的差异。
Here is a listing of x, f(x) and yhat
Things to improve
* adjusting the number of layers.
* adjusting how many neurons in each layer
* adjusting the batch size
* adjusting the epoch size
此外
* look at k-folds for further model refinement.
谢谢你
悉尼的Anthony
尊敬的Jason博士,
Here is an even improved version with very close results.
Instead of MinMaxScaler, I took the logs (to the base e) of the inputs x and f(x) applied my model, then retransformed my model to its original values.
Snippets of code transforming the data
The
The resulting output: Note how close the actual f(x) is to the predicted f(x)
干得不错。
嗨,Jason,
Thank you very much for “Your First Deep Learning Project in Python with Keras Step-By-Step” tutorial. It is very useful for me. I want to ask you
Can I code
model.add(Dense(8)) # input layer
model.add(Dense(12, activation=’relu’)) # first hidden layer
而不是
model.add(Dense(12, input_dim=8, activation=’relu’)) # input layer and first hidden layer
Sincerely.
不行。
The input_dim argument defines the input layer.
Hi Jason, is it not necessary to use the keras utilility ‘to_categorical’ to convert your y vector into a matrix before fitting the model?
You can, or you can use the sklearn tools to do the same thing.
嗨,Jason,
Thanks a lot for your tutorial about deep learning project, it really help me a lot in my journey to learn machine learning.
I have a question about the data splitting in code above, how is the splitting work between data for training and the data for validate the training data? I’ve tried to read your tutorial about the data splitting but i have no ideas about the data splitting work above.
Thankyou,
Aquilla
We did not split the data, we fit and evaluated on one set. We did this for brevity.
嗨,Jason,
I just wanted to thank you. This tutorial is incredibly clear and well presented. Unlike many other online tutorials you explain very eloquently the intuition behind the lines of code and what is being accomplished which is very useful. As someone just starting out with Keras I had been finding some of the coding, as well as how Keras and Tensorflow interact, confusing. After your explanations Keras seems incredibly basic. I’ve been looking over some of my recent code from other Keras tutorials and I now understand how everything works.
再次感谢!
Well done on your progress and thanks for your support!
Dear Jason. I am deeply grateful to this amazing work. Everything works well so far. King Regards
谢谢,你做得很好!
Please i need help, which algorithms is the best in cyber threat detection and how to implement it. thanks
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/what-algorithm-config-should-i-use
先生,你好
do you have an implementation about (medical image analysis with deep learning).
i need to start with medical image NOT real world image
thanks for your help.
没有,抱歉。
so, what do you recommend me about it
谢谢。
Perhaps start by collecting a dataset.
Then consider reviewing the literature to see what types of data prep and models other have used for similar data.
Sir. i am new to neural network. so from where i start it. or which tutorial i watch . i didn’t have any idea about it.
是的,您可以从这里开始。
https://machinelearning.org.cn/start-here/#deeplearning
hello sir, I’m new to this field. I’m going to develop monophonic musical instrument classification system using python and Keras. sir,I want to find monophonic data set, how can I find it.
I try to get piano music from you tube and convert it to .waw file and splitting it. Is it a good or bad ? or an other methods available to get free data set on the web.. give your suggestions please ??
也许这会有帮助。
https://machinelearning.org.cn/faq/single-faq/where-can-i-get-a-dataset-on-___
i got score 76.69
干得好!
Hello, I just want to say that I am elated to use your tutorial. So, I am working on a group project with my team and I used datasets representing heart disease, diabetes and breast cancer for this tutorial. However, this code example will give an error when the cell contains a string value, in this case… title names like clump_thickess and ? will produce an error. how do I fix this?
谢谢。
Perhaps try encoding your categories using a one hot encoding first
https://machinelearning.org.cn/how-to-prepare-categorical-data-for-deep-learning-in-python/
thank you sir for this article, would you please suggest an example with testing data ?
Sorry I don’t understand your question, can you elaborate?
I believe there is something wrong with the (150/10) 15 updates to the model weights. The internal coefficients are updated after every single batch. Our data is comprised of 768 samples. Since batch_size=10, we obtain 77 batches (76 with 10 samples and one with 8). Therefore, at each epoch we should see 77 updates of weights and coefficients and not 15. Moreover, the total number of updates must be: 150*77=11550. Am I missing something important?
Really good job and very well-written article (all your articles). Keep up the good job. Cheers
You’re right. Not sure what I was thinking there. Simplified.
Thanks! This is my first foray into keras, and the tutorial went swimmingly. Am now training on my own data. It is not performing worse than on my other machine learning models (that’s a win :).
干得好!
Hi,Jason. Thanks so much for your answer. Now my question is why I can’t found my directory in Jupyter and put the ‘pima-indians-diabetes.csv’ in it.
OSError Traceback (most recent call last)
in
4 from keras.layers import Dense
5 # load the dataset
—-> 6 dataset = loadtxt(‘pima-indians-diabetes.csv’, delimiter=’,’)
7 # split into input (X) and output (y) variables
8 X = dataset[:,0:8]
D:\anaconda\lib\site-packages\numpy\lib\npyio.py in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding, max_rows)
966 fname = os_fspath(fname)
967 if _is_string_like(fname)
–> 968 fh = np.lib._datasource.open(fname, ‘rt’, encoding=encoding)
969 fencoding = getattr(fh, ‘encoding’, ‘latin1’)
970 fh = iter(fh)
D:\anaconda\lib\site-packages\numpy\lib\_datasource.py in open(path, mode, destpath, encoding, newline)
267
268 ds = DataSource(destpath)
–> 269 return ds.open(path, mode, encoding=encoding, newline=newline)
270
271
D:\anaconda\lib\site-packages\numpy\lib\_datasource.py in open(self, path, mode, encoding, newline)
621 encoding=encoding, newline=newline)
622 else
–> 623 raise IOError(“%s not found.” % path)
624
625
OSError: pima-indians-diabetes.csv not found.
Perhaps try running the code file from the command line, as follows
https://machinelearning.org.cn/faq/single-faq/how-do-i-run-a-script-from-the-command-line
你好,先生,
My name is manohar. i trained a deep learning model on car price prediction. i got
loss: nan – acc: 0.0000e+00. if you give me your email ID then i will send you. you can tell me the problem. please do this help because i am a beginner.
Perhaps you need to scale the data prior to fitting?
Perhaps you need to use relu activation?
Perhaps you need some type of regularization?
Perhaps you need a larger or smaller model?
嗨,Jason,
thanks and it is a great tutorial. just 1 question. do we have to train the model by “model.fit(x, y, epochs=150, batch_size=10)” every time before making the prediction because it takes a very long time to train the model. I am just wondering whether it is possible to save the trained model and go straight to the prediction skipping the model.fit (eg: pickle)?
many thanks for your advice in advance
祝好
No, you can fit the model once, then save it
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
Then later load it and make predictions.
Thanks and will check it out
Thank you so much for this tutorial sir but How can I use the model to predict using data outside the dataset?
Call model.predict() with the new inputs.
See the “Make Predictions” section.
Nice! Thank you so much, Sir. I figured it out using the link on the “Make predictions” section. I’ve learned a lot from your tutorials. You’re the best!
干得好!
谢谢。
嗨,Jason,
Thanks for sharing this post.
I have a question, when I tried to split the dataset
(X = dataset[:,0:8]
y = dataset[:,8])
it gives me an error: TypeError: ‘(slice(None, None, None), slice(0, 8, None))’ is an invalid key
how can I fix it?
谢谢,
monica
很抱歉听到这个消息,这可能会有帮助
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
Thanks for the tutorial! This is a wonderful ‘Hello World’ to Deep Learning
Thanks, I’m happy it was helpful.
Hello Jason! hope you are doing good.
I am actually doing a project on classification of thyroid disease using back propagation with stocastic gradient descent method,can you help me out with the code a little bit?
Perhaps start by adapting the code in the above tutorial?
尊敬的先生
I want to predict air pollution using deep learning techniques please suggest how to go about with my data sets
从这里开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
AttributeError: module ‘tensorflow’ has no attribute ‘get_default_graph’AttributeError: module ‘tensorflow’ has no attribute ‘get_default_graph’
Perhaps confirm you are using TF 2 and Keras 2.3.
我使用 LSTM 技术对句子中的协议错误进行了检测,请您为我的数据集提供建议。
您可以在这里开始处理自然语言处理问题。
https://machinelearning.org.cn/start-here/#nlp
你好,Jason
我正在为我的项目使用此代码。它对您的数据集效果完美。但是我的数据集有很多 0 和 1。因此,我的预测结果是错误的。我该如何解决这个问题?
这里有一些建议。
https://machinelearning.org.cn/improve-deep-learning-performance/
你好。我想问一下。我按照所有步骤操作了,但是在拟合模型时卡住了。出现了这个错误。我该如何解决这个问题?
我已经尝试了这一步,并在拟合阶段卡住了,并且出现了此错误。您对我的问题有什么解决方案吗?
—————————————————————————
ValueError 回溯 (最近一次调用)
in
1 # 在数据集上拟合 keras 模型
—-> 2 model.fit(x, y, batch_size=10,epochs=150)
~\Anaconda4\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
1152 sample_weight=sample_weight,
1153 class_weight=class_weight,
-> 1154 batch_size=batch_size)
1155
1156 # 准备验证数据。
~\Anaconda4\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
577 feed_input_shapes,
578 check_batch_axis=False, # 不强制批次大小。
–> 579 exception_prefix=’input’)
580
581 if y is not None
~\Anaconda4\lib\site-packages\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
143 ‘: 期望 ‘ + names[i] + ‘ 的形状为 ‘ +
144 str(shape) + ‘ 但得到形状为 ‘ +
–> 145 str(data_shape))
146 return data
147
ValueError: 检查输入时出错:期望 dense_133_input 的形状为 (16,) 但得到形状为 (17,) 的数组
也许这能帮助您复制教程中的代码。
https://machinelearning.org.cn/faq/single-faq/how-do-i-copy-code-from-a-tutorial
很抱歉听到这个消息,也许这会有所帮助。
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
谢谢你的回答 Jason。
不客气。
你好,Jason!
再次… 感谢您精彩的教程,感谢您将知识公开!>800条评论,几乎全部得到了回复,您太棒了。我无法理解您如何处理这一切,撰写精彩的内容,进行机器学习,教学,学习,非常尊重!
2个普遍性问题
问题(1)
为什么以及何时我们需要对输入进行 flatten(),在哪些情况下不需要?
例如,4个数值输入,每个输入的滞后2意味着每个批次有4*2=8个值
我总是这样做,无论有多少输入或滞后,我将其作为扁平数组输入。
1 个设置/批次:[[1.0,1.1, 2.0,2.1, 3.0,3.1, 4.0,4.1]]
Input(shape=(8,)) # keras func api
输入这样的结构是否有意义,如果有,为什么/何时?
更好的?[[[1.0,1.1], [2.0,2.1], [3.0,3.1], [4.0,4.1]]]
问题(2)
您还在使用 Theano 吗?由于他们不更新它,它变得越来越旧,但并不差;)。我尝试了很多 Tensorflow – 但速度方面总是表现不佳。Theano 对我来说要快得多(3-10 倍)。但是使用超过 1 个核心对我来说总是更慢,无论是在 theano 还是 tf 中。您是否遇到过类似的情况?我也尝试过 torch,它很好,但它也比我用的 theano 慢。有什么想法或替代方案吗(我不能使用 gpu/external/aws)?
我很高兴看到您进行一些深度强化学习(DRL)的工作,您怎么看?您在做吗?
此致,继续加油 😉
当一个层的输出形状与另一个层的输入形状不匹配时,例如 CNN 输出到 Dense,您需要进行扁平化。
不。我多年来一直使用并推荐 tensorflow。Tensorflow 过去在 Windows 用户上无法正常工作,所以我仍然推荐 theano 给他们,如果他们遇到麻烦。Theano 运行良好,并且对于大多数应用程序来说仍然会运行良好。
不,强化学习不实用/没有用。
https://machinelearning.org.cn/faq/single-faq/do-you-have-tutorials-on-deep-reinforcement-learning
亲爱的 Jason,谢谢你的回答;)…
“当一个层的输出形状与另一个层的输入形状不匹配时,例如 CNN 输出到 Dense,您需要进行扁平化。”
谢谢。关于“flatten”操作的问题并不是关于层之间的 flatten(),而是关于如何将输入呈现给输入层。抱歉表达得不够清晰。也许我误解了什么,是否有不扁平化 FEATURES/INPUTS/LAGS 的用例?
“强化学习不实用/没有用”
这个陈述是基于您的经验,还是您在没有自己检查的情况下就采纳了别人的意见?请不要误解,您是这里的专家。但是,我可以反驳一些反对强化学习的论点。
奖励难以创建:取决于您的环境
不稳定:取决于您的环境、代码、设置
我开始尝试一个简单的 DQN,我一步步地扩展它,现在我有了“Dueling Double DQN”。它学习得很好而且很快。我承认 – 在简单的数据上。但它是可重复和可复现的!所以我想说:总的来说,它是有效的。
我需要看看它在更复杂的数据上是如何工作的。这就是为什么我强调这种方法的性能在很大程度上取决于应用领域。
但是有一个巨大的问题,大多数公开的资源包含错误的代码或错误的实现。我从未在任何主题上报告或发现过如此多的错误。这些错误被一次又一次地复制,最终许多人认为它们是正确的。我收集了大量的链接和 PDF 文件来理解和调试这个野兽。
没关系,您必须自己决定。如果您想看看,请举一个简单的例子,即使是 DQN(没有 dueling 或 double)也能学会 – 如果代码是正确的。而且,虽然我不是数学家:理解它是如何工作的以及它提供的可能性——让我笑了 😉…
有关 LSTM/1d CNN 输入形状的更多信息,请参阅此。
https://machinelearning.org.cn/faq/single-faq/what-is-the-difference-between-samples-timesteps-and-features-for-lstm-input
我还没有看到“工作中开发人员”在涵盖链接中描述的 RL 方面有投资回报率。
有趣的阅读
“我们使用双深度 Q 网络(DDQN)来找到合适的材料类型和最优的几何设计,用于超表面全息图以实现高效率。DDQN 就像一个智能扫描,在仅 2169 步之后就能识别出约 57 亿个状态中的最优结果。在 23 种不同的材料类型和各种几何属性的三层结构之间找到了最优结果。计算出的透射效率为 32%,适用于高质量的超表面全息图;这比之前在相同条件下报告的结果大两倍。”
https://www.nature.com/articles/s41598-019-47154-z
感谢分享。
简直是最好的“第一个神经网络教程”
通过添加层和减小批次大小,我获得了 85.68 的准确率。
谢谢。
干得好!
你好 Jason,
我有一个快速的问题。
我正在为二元分类任务构建一个 sigmoid 神经元,基本上我遵循的是 1 个 sigmoid 模型是这样的。
model = Sequential()
model.add(Dense(1, activation=’sigmoid’))
我的输入是大小为 (39*39*3) 的图像。
我不确定如何将这些图像输入到我的 Dense 层(这是我唯一使用的层)。
我现在使用以下方法输入我的图像:
train_generator = train_datagen.flow_from_directory(train_data_dir,
target_size=(39, 39),
batch_size=batch_size)
class_mode='binary')
但是 Dense 层无法接受输入形状 (39, 39, 3)。
那么我的问题是,如何将我的图像数据输入到 Dense 层?
您可以对输入进行扁平化,或者使用 CNN 作为输入,它专门用于处理 3D 输入样本。
嗨,Jason,
非常感谢您的教程。
我刚开始接触深度学习。我能够修改您的代码并使其在我用 3 轴加速度计记录的数据集上工作。我的目标是检测我是在行走还是在跑步。我为每种活动记录了大约 50 次试验。从信号中,我计算了能够区分这两种活动的特定参数。在参数中,我计算了所有轴的平均值、最小值和最大值,以及频域中的一些参数(功率谱的前 3 个峰值及其相应的位置)。
它效果非常好,我能够轻松地检测到我是在跑步还是在行走。
然后我决定添加第三种活动:站立。我也记录了 50 次此活动的试验。如果我用站立和跑步训练我的模型,我可以识别这两种活动。如果我用站立和行走或行走和站立训练它,也是如此。
如果我用这三种活动来训练我的模型,那就更复杂了。实际上,它做不到。它只能识别前两种活动。因此,例如,如果站立、行走和跑步的 ID 分别为 0、1 和 2,那么它只能检测 0 和 1(站立和行走)。它认为所有跑步试验都是行走试验。如果站立、跑步和行走分别有 ID:0、1 和 2,那么它只能检测 0 和 1(站立和跑步)。它认为所有行走试验都是跑步试验。
所以我的问题是:假设您拥有数据集,如果您需要修改您的脚本以检测人们是否为 0:非糖尿病,1:1 型糖尿病患者,2:2 型糖尿病患者,您将如何修改您的脚本?
非常感谢您的帮助。
不客气。
干得好。
这被称为多类分类,本教程将对此有所帮助。
https://machinelearning.org.cn/multi-class-classification-tutorial-keras-deep-learning-library/
非常感谢您如此迅速地回复我。
这正是我想要的。
祝好,
不客气。
很高兴听到这个消息。
嗨,Jason,
我获得了 75.52 的准确率。这可以吗?请告诉我。
干得好。尝试运行示例几次。
杰森教授您好。
教授,如何使准确率稳定运行代码?给出示例 86%,下次 82% 如何解决这个问题!
#导入
from numpy import loadtxt
来自 keras.models import Sequential
from keras.layers import Dense
# 加载数据集
dataset = loadtxt(‘E:/ms/impotnt/iwp1.csv’, delimiter=’,’)
# 分割为输入 (X) 和输出 (y) 变量
X = dataset[:,0:8]
y = dataset[:,8]
# 定义 Keras 模型
#model = Sequential()
model = Sequential()
#model.add(Dense(25, input_dim=8, init=’uniform’, activation=’relu’))
model.add(Dense(30, input_dim=8, activation=’relu’))
model.add(Dense(95, activation=’relu’))
model.add(Dense(377, activation=’relu’))
model.add(Dense(233, activation=’relu’))
model.add(Dense(55, activation=’relu’))
model.add(Dense(1, activation=’sigmoid’))
# 编译 Keras 模型
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 在数据集上拟合 Keras 模型
model.fit(X, y, epochs=150, batch_size=10)
# 评估 Keras 模型
_, accuracy = model.evaluate(X, y)
print(‘Accuracy: %.2f’ % (accuracy*100))
输出
0.1153 – accuracy: 0.9531
第 149 周期/150
768/768 [==============================] – 0s 278us/step – loss: 0.1330 – accuracy: 0.9401
第 150 周期/150
768/768 [==============================] – 0s 277us/step – loss: 0.1468 – accuracy: 0.9375
768/768 [==============================] – 0s 41us/step
准确率:94.01
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/can-you-read-review-or-debug-my-code
回溯(最近一次调用)
文件“keras_first_network.py”,第 7 行,在
dataset = loadtxt(‘pima-indians-diabetes.csv’, delimiter=’,’)
文件 “C:\Users\Hussnain\anaconda3\lib\site-packages\numpy\lib\npyio.py”,第 1159 行,在 loadtxt
for x in read_data(_loadtxt_chunksize)
文件 “C:\Users\Hussnain\anaconda3\lib\site-packages\numpy\lib\npyio.py”,第 1087 行,在 read_data
items = [conv(val) for (conv, val) in zip(converters, vals)]
File “C:\Users\Hussnain\anaconda3\lib\site-packages\numpy\lib\npyio.py”, line 1087, in
items = [conv(val) for (conv, val) in zip(converters, vals)]
文件 “C:\Users\Hussnain\anaconda3\lib\site-packages\numpy\lib\npyio.py”,第 794 行,在 floatconv
return float(x)
ValueError: 无法将字符串“\"6”转换为浮点数。
我运行它时出现了上述错误,请帮忙。我正在使用 Anaconda 3,Python 3.7,tensorflow,keras。
很抱歉听到这个消息,这可能会有所帮助。
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
(base) C:\Users\Madhawa Akalanka\python codes>python keras_first_network.py
使用 TensorFlow 后端。
2020-04-09 13:42:28.003791: I tensorflow/core/platform/cpu_feature_guard.cc:142]
您的 CPU 支持此 TensorFlow 二进制文件未编译的指令
使用:AVX AVX2
2020-04-09 13:42:28.014066: I tensorflow/core/common_runtime/process_util.cc:147
] 创建新的线程池,默认的 inter op 设置为:2。使用 inter_op 进行调整
_parallelism_threads 以获得最佳性能。
回溯(最近一次调用)
文件 “keras_first_network.py”,第 12 行,在
model.fix(X,Y,epochs=150,batch_size=10)
AttributeError: ‘Sequential’ 对象没有属性 ‘fix’
运行此代码时出现此错误。请帮忙。
很抱歉听到这个消息,请看这个。
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
亲爱的Jason
感谢您精彩的网站和书籍。我是一名博士,也是您在深度学习领域的一位粉丝。有时我感到失望,因为我无法在该领域实现我的目标。我的目标是发现新事物并发表它。虽然我大多能理解您的代码,但为该领域做出贡献很难,需要理解整个理论,而我到目前为止还未能做到。您能给我一些建议继续吗?非常感谢。
不客气。
坚持每天练习。这是我最好的建议。
有一个拼写错误:“input to the model lis defined” (输入到模型的列表被定义)。
谢谢!已修复。
使用今天的最新库,我收到了许多由于最新 numpy:1.18.1 与最新 TensorFlow:1.13.1 不兼容而产生的警告。
即
FutureWarning: 传递 (type, 1) 或 ‘1type’ … (6 次)
to_int32 (来自 tensorflow.python.ops.math_ops) 已弃用。
选项是回滚到旧版 numpy 或抑制警告,我选择了抑制警告,代码如下:
# 使用 Keras 教程的第一个神经网络
# 抑制 TF / numpy 版本不兼容的警告:https://github.com/tensorflow/tensorflow/issues/30427#issuecomment-527891497
import warnings
warnings.filterwarnings(‘ignore’, category=FutureWarning)
import tensorflow
# 抑制 TF 的警告:to_int32 (来自 tensorflow.python.ops.math_ops) 已弃用:https://github.com/aamini/introtodeeplearning/issues/25#issuecomment-578404772
import logging
logging.getLogger(‘tensorflow’).setLevel(logging.ERROR)
import keras
from numpy import loadtxt
来自 keras.models import Sequential
from keras.layers import Dense
我建议使用 Keras 2.3 和 TensorFlow 2.1。
是的,升级到 tensorflow 2.1 解决了这个问题,我现在已经移除了我的警告抑制,并且在输出中看不到警告了。
我像这样升级了 TF:
pip install –upgrade tensorflow
我遵循了您在 https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/ 上的安装说明,最终得到了 TF 版本 1.13.1。我运行的命令是:
conda install -c conda-forge tensorflow
我在 Mac 上,我在 TF2.1 在 conda 上不可用的地方看到了可能的讨论:https://github.com/tensorflow/tensorflow/issues/35754
干得好!
我自己使用 macports。
https://machinelearning.org.cn/install-python-3-environment-mac-os-x-machine-learning-deep-learning/
感谢 Jason 的教程。我通过添加 dropout 和 X 的标准化来应用我的示例。
X = dataset[:, 0:7]
y = dataset[:, 7]
scaler = MinMaxScaler(feature_range=(0, 1))
X = scaler.fit_transform(X)
# 定义 Keras 模型
model = Sequential()
model.add(Dense(6, input_dim=7, activation=’relu’))
model.add(Dropout(rate=0.3))
model.add(Dense(6, activation=’relu’))
model.add(Dropout(rate=0.3))
model.add(Dense(1, activation=’sigmoid’))
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’]
history=model.fit(X, y, epochs=30, batch_size=30, validation_split=0.1)
_, accuracy = model.evaluate(X, y)
print(‘Accuracy: %.2f’ % (accuracy*100))
我的准确率显示为 100%,这不正常。为了调整我的模型,我应该怎么做?
干得好!
也许可以使用 k 折交叉验证来评估您的模型。
是的,我遵循了您使用 k 折交叉验证的示例,它总是给我 100%。
如果我移动标准化,它会给出 83%,您能指导我一下吗?
seed = 4
numpy.random.seed(seed)
dataset = loadtxt(‘data.csv’, delimiter=’,’)
X = dataset[:, 0:7]
Y = dataset[:, 7]
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=seed)
cvscores = []
for train, test in kfold.split(X,Y)
model = Sequential()
model.add(Dense(12, input_dim=7, activation=”relu”))
model.add(Dropout(rate=0.2))
model.add(Dense(6, activation=”relu”))
model.add(Dropout(rate=0.2))
model.add(Dense(1, activation=”sigmoid”))
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
model.fit(X[train], Y[train], epochs=20, batch_size=10, verbose=1)
scores = model.evaluate(X[test], Y[test], verbose=0)
print(“%s: %.2f%%” % (model.metrics_names[1], scores[1]*100))
cvscores.append(scores[1] * 100)
print(“%.2f%% (+/- %.2f%%)” % (numpy.mean(cvscores), numpy.std(cvscores)))
干得漂亮!也许您的预测任务很简单?
您非常有帮助。
或者因为我的数据不够多。所以没有其他东西我能用了吗?
也许可以。
Jason 先生,您太棒了!如此好且易于理解的教程。工作出色!
谢谢!
“请注意,最令人困惑的是,模型输入的形状被定义为第一个隐藏层的参数。这意味着添加第一个 Dense 层的代码行执行两项操作:定义输入层或可见层,以及第一个隐藏层。”
您能更好地解释一下吗?谢谢,工作出色!
是的,请看这个
https://machinelearning.org.cn/faq/single-faq/how-do-you-define-the-input-layer-in-keras
事实上,布朗利博士,我无法感谢您足够多。
上帝保佑你。
谢谢。不客气!
亲爱的Jason
感谢这个有趣的 कोड。我在我的电脑上用 keras 2.3.1 测试了这段代码在 pima-indians-diabetes 上,但奇怪的是我的准确率是 52%。我想知道为什么你的准确率(76%)和我的(52%)之间会有这么大的差异。
不客气。
或许可以尝试多运行几次这个例子?
想问:在第一层(隐藏层)中,我们根据拥有的特征定义了 input_dim=8。并且我们指定了神经元=12。但问题是,我学到的一点是,我们根据输入(特征)来指定神经元。意思是,如果我们有 8 个输入,那么神经元也将是 8 个。但您指定了 12 个。为什么?
2)在任何问题中,我们是否都必须指定一个神经网络,对吧?它可以是任何东西,例如:卷积、循环等。那么我们在这里选择了哪种神经网络?在哪里?
3)我们必须分配权重。那么在哪里分配?
请告诉我。谢谢您,先生。
模型的第一行定义了两件事:输入层或可见层 (8) 和第一个隐藏层 (12)。更多信息请参见此。
https://machinelearning.org.cn/faq/single-faq/how-do-you-define-the-input-layer-in-keras
这两者可以有不同的值,它们没有直接关联。
是的,这将帮助您选择模型。
https://machinelearning.org.cn/when-to-use-mlp-cnn-and-rnn-neural-networks/
调用 compile() 时,权重会自动分配为小的随机数。
https://machinelearning.org.cn/why-initialize-a-neural-network-with-random-weights/
先生,我仍然感到困惑,就像在 ML 算法中我们指定要实现哪种算法来适应场景一样,例如对于回归,我们可以选择线性回归、逻辑回归等。
那么现在我们选择了哪种神经网络?卷积、RNN 等?
线性回归用于回归,逻辑回归用于分类。
以下是一些您可以在回归任务上尝试的回归算法。
https://machinelearning.org.cn/spot-check-regression-machine-learning-algorithms-python-scikit-learn/
权重、偏差和输入值在哪里?
当我们调用 compile() 时,权重被初始化为小的随机值。
你好 Jason,
恭喜您所做的所有出色工作,我想问您
如何知道所有 epoch 的平均训练时间和验证时间?
您可以推断出一个 epoch 的时间来计算您想训练的 epoch 数。
嗨,Jason,
我刚接触深度学习。我明白您使用 model.fit 来拟合数据,使用 model.predict 来预测类变量 y 的值。但是,是否也可以提取参数估计并推导出 f(X) = y(类似于回归)?
也许对于小型模型可以,但对于数千个系数来说会很混乱。该模型是一个复杂的电路。
你好 Jason,你是否知道如何预测价格或价值范围?
如果我使用 keras 模型来预测价格/价值范围,我能否找到 keras 模型的准确性?因为在您的文章中只预测了二元输出
您描述的是一个回归问题,我建议从这里开始
https://machinelearning.org.cn/regression-tutorial-keras-deep-learning-library-python/
预测范围称为预测区间,此处了解更多信息
https://machinelearning.org.cn/prediction-intervals-for-machine-learning/
感谢您的解释,我是一名机器学习和 python 初学者。您能帮助我获取预测乙型肝炎病毒的精确 CSV 数据文件吗?
这会帮助您找到数据集
https://machinelearning.org.cn/faq/single-faq/where-can-i-get-a-dataset-on-___
768/768 [==============================] – 2s 3ms/step
Accuracy: 76.56
干得好!
为什么你不进行数据标准化?有必要吗?我看过一些教程,他们使用“from sklearn.preprocessing import StandardScaler”对数据进行标准化以获得通用比例。这种方法和你使用的方法有什么区别?
标准化或标准化输入数据可能有助于某些算法。也许可以试试看。
Jason,
你是最棒的!
您的程序的名称是“helloDL.py”
我相信您未来的书籍《你好深度学习》将成为市场上最受欢迎的书籍。
人们需要程序
helloClassification.py
helloRegression.py
helloHelloPrediction.py
helloDogsCats.py
helloFaces.py
等等!
感谢您的辛勤工作!
谢谢。
您可以在博客上找到所有这些,请使用搜索功能。
你好,
是否有办法访问最后一个 epoch 的准确性?如果有,我该如何访问并保存它?
诚挚的问候
是的,history 对象包含每个 epoch 计算的分数
https://machinelearning.org.cn/display-deep-learning-model-training-history-in-keras/
准确率:82.42
epoch=1500
batch_size=1
我不知道我做的是否恰当。任何建议都将不胜感激。
干得好!
嗨,Jason,
非常感谢这个精彩的学习平台。
为什么第一个隐藏层使用了 12 个神经元?其背后的标准是什么?是随机的还是有潜在的原因/计算?
(我假设隐藏层中的神经元数量始终在输入和输出数量之间)
我经过一些试错后选择了这个配置。
没有好的理论来配置神经网络
https://machinelearning.org.cn/faq/single-faq/how-many-layers-and-nodes-do-i-need-in-my-neural-network
你好 Jason,
我的训练和测试数据集的形状是这样的
xTrain_CN.shape, yTrain_CN.shape, xTest_CN.shape
((320, 56, 6251), (320,), (80, 56, 6251))
我遇到了这个错误:ValueError: Error when checking input: expected dense_20_input to have 2 dimensions, but got array with shape (320, 56, 6251)
以下是代码
def nn_keras(xTrain_CN, yTrain_CN, xTest_CN)
model = Sequential()
model.add(Dense(12, input_dim=6251, activation=’relu’))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation=’sigmoid’))
# 编译 Keras 模型
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 在数据集上拟合 Keras 模型
model.fit(xTrain_CN, yTrain_CN, epochs=150, batch_size=10)
# 评估 Keras 模型
_, accuracy = model.evaluate(xTrain_CN, yTrain_CN)
print(‘Training Accuracy: %.2f’ % (accuracy*100))
_, accuracy = model.evaluate(xTrain_CN, yTrain_CN)
print(‘Testing Accuracy: %.2f’ % (accuracy*100))
nn_keras(xTrain_CN, yTrain_CN, xTest_CN)
MLP 必须在训练期间接受二维数据(行和列)作为输入,在输出时接受一维数据作为输出。
嗨,Jason,
这是一个很棒的教程,非常容易理解!!是否有关于如何将权重和偏置添加到我们的模型的教程?
谢谢!
你好,如果我有一个预测问题,是否必须将输入变量缩放到使用 sigmoid 或 relu 激活函数或您决定的任何激活函数?
不,但可以尝试一下并比较结果。
我如何创建一个具有多个输出的配置,即输出层具有 2 个或更多值?
是的,只需在输出层指定目标数量,并相应地准备训练数据即可。
我有一个关于此的教程,已编写并安排在下周发布,我认为。
教程的名称是什么,我该如何找到它?
就在这里
https://machinelearning.org.cn/deep-learning-models-for-multi-output-regression/
你好,Jason。
感谢您这篇文章的卓越品质。我熟悉使用 Scikit-Learn 进行机器学习,阅读这篇文章(以及您之前关于该主题的一些文章)极大地帮助我开始构建多层感知机。
我用 Wisconsin Diagnostic Breast Cancer (WDBC) 数据集测试了在这里学到的知识。我只使用了 3 个特征(半径、纹理、光滑度)和以下拓扑,在训练集上获得了约 92.965% 的准确率,在测试集上获得了 96.491% 的准确率:
• Epochs = 250
• Batch_size = 60
• 激活函数 = ReLu
• 优化器 = ‘Nadam’
层;神经元数量;激活函数
输入;3;无
隐藏 1;4;ReLu
隐藏 2;4;ReLu
隐藏 3;2;ReLu
输出;1;Sigmoid
训练和测试使用以下方法分割:train_test_split(X, y, test_size=0.33, random_state=42)
谢谢!
谢谢。
Simon,你的成果很棒!
0s 833us/step – loss: 0.4607 – accuracy: 0.7773
干得好!
第二次使用笔记本电脑 GPU 得到
0s 958us/step – loss: 0.4119 – accuracy: 0.8216
准确率:82.16
你好 Jason,如何使用预训练的深度学习模型来预测图像伪造和真实性?
也许可以准备一个真实和虚假图像的数据集,并训练一个二元分类模型来区分两者。
也许这个教程能帮助你入门
https://machinelearning.org.cn/how-to-develop-a-convolutional-neural-network-to-classify-photos-of-dogs-and-cats/
你好 Jason,
您能指导我如何将查询和文档作为输入到我们的 NN 中吗(知道它们都由频率向量表示)?
也许从这里开始
https://machinelearning.org.cn/start-here/#nlp
Jason博士,您好,
非常感谢您的回复,该链接对我很有用,
然而,由于我刚开始接触 NN,我还是有点迷茫。实际上,我想使用 NN 计算查询和文档之间的相似性。输入是(文档的 TF 向量和查询的 TF 向量,输出是相似性(0 如果不相似,1 如果相似))。我有一个 NN 的想法,但不知道从哪里开始……
如果您能帮助我(也许是一个类似的示例代码),我将非常感激。
等待您的回复.. 提前感谢
我认为您是在询问计算文本相似性。如果是这样,抱歉我没有关于该主题的教程。
是的,这就是我想要的。无论如何,非常感谢您的教程,它们非常清晰且富有成效。
不客气。
我非常感谢您的教程。您能指导我如何使用混淆矩阵参数(如召回率、精确率、F1 分数)来评估模型吗?
是的,这里有一些例子
https://machinelearning.org.cn/how-to-calculate-precision-recall-f1-and-more-for-deep-learning-models/
很棒的教程,很有帮助!
谢谢!
你好 Jason,非常感谢您提供这些。
我欣赏您在其他页面链接中提供的深入解释。
我想知道如何保持心智状态。例如,您在运行时训练模型并获得准确性级别。如果您最终通过训练特定的配置获得了准确性级别,您如何在不重新训练的情况下保留该配置/心智状态/人工神经网络的准确性级别?
我能否将该“心智状态”的快照保存在某处,以便当您拥有一个运行良好的模型时,您就可以使用它来处理新数据,还是我在尝试理解这个概念时仍然遗漏了一些关键要素?
谢谢!
您可以保存模型并稍后加载它以进行预测,请参阅此教程
https://machinelearning.org.cn/save-load-machine-learning-models-python-scikit-learn/
非常感谢!
不客气。
很棒的博客和技术技能,您是否愿意推荐我一些其他博客?
谢谢!
嗨
我们可以只使用 CSV 文件格式吗?
不,深度学习可以使用图像、文本数据、音频数据,几乎任何可以用数字表示的东西。
epoch =10000 且 batch-size = 20 时,我获得了 84% 的准确率和 loss: 0.3434
干得好!
这很好,但您的模型的泛化误差可能很高。因为更多的 epoch 意味着更多的过拟合,因此您应该为任何深度学习训练使用更少的 epoch。
很好的建议。
首先,感谢您的精彩解释,
我该如何保存训练好的模型以供测试使用,因为每次我尝试执行程序时,训练都会重复?
谢谢。
好问题,这会教您如何操作
https://machinelearning.org.cn/save-load-keras-deep-learning-models/
你好 Jason,我应用了深度神经网络(DNN)算法进行预测,它工作得很好。我在评估预测结果时遇到了问题,我使用了(metrics.confusion_matrix),它给了我这个错误
ValueError: Classification metrics can’t handle a mix of binary and continuous targets
有什么建议可以解决这个错误吗?
注意:我的类别标签(结果变量)是二元的(0,1)
提前感谢
请看这个教程
https://machinelearning.org.cn/how-to-calculate-precision-recall-f1-and-more-for-deep-learning-models/
首先,请允许我感谢您提供的这个精彩教程以及您的宝贵时间。
我想问:您在同一数据集上训练和评估了网络。为什么它没有生成 100% 的准确率呢?
谢谢
所有模型都有误差。
如果我们获得完美的技能/100% 的准确率,那么问题可能太简单了,不需要机器学习。
https://machinelearning.org.cn/faq/single-faq/what-does-it-mean-if-i-have-0-error-or-100-accuracy
你好,很棒的教程,一切都正常,只是在尝试添加预测时,我收到了以下错误消息。您能否帮忙解决?非常感谢。
WARNING:tensorflow:From C:/Users/ZuzanaŠútová/Desktop/RTP new/3_training_deep_learning/data_PDS/keras_first_network_including_predictions.py:27: Sequential.predict_classes (from tensorflow.python.keras.engine.sequential) is deprecated and will be removed after 2021-01-01.
Instructions for updating
请改用:*
np.argmax(model.predict(x), axis=-1)
,如果您的模型进行多类分类(例如,最后一层激活使用softmax
)。*(model.predict(x) > 0.5).astype("int32")
,如果您的模型进行二元分类(例如,最后一层激活使用sigmoid
)。警告(来自警告模块)
File “C:\Users\ZuzanaŠútová\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\engine\sequential.py”, line 457
return (proba > 0.5).astype(‘int32’)
RuntimeWarning: invalid value encountered in greater
回溯(最近一次调用)
File “C:\Users\ZuzanaŠútová\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\indexes\base.py”, line 2895, in get_loc
return self._engine.get_loc(casted_key)
File “pandas\_libs\index.pyx”, line 70, in pandas._libs.index.IndexEngine.get_loc
File “pandas\_libs\index.pyx”, line 101, in pandas._libs.index.IndexEngine.get_loc
File “pandas\_libs\hashtable_class_helper.pxi”, line 1032, in pandas._libs.hashtable.Int64HashTable.get_item
File “pandas\_libs\hashtable_class_helper.pxi”, line 1039, in pandas._libs.hashtable.Int64HashTable.get_item
KeyError: 0
上述异常是以下异常的直接原因
回溯(最近一次调用)
File “C:/Users/ZuzanaŠútová/Desktop/RTP new/3_training_deep_learning/data_PDS/keras_first_network_including_predictions.py”, line 30, in
print(‘%s => %d (expected %d)’ % (X[i].tolist(), predictions[i], y[i]))
File “C:\Users\ZuzanaŠútová\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\frame.py”, line 2902, in __getitem__
indexer = self.columns.get_loc(key)
File “C:\Users\ZuzanaŠútová\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\indexes\base.py”, line 2897, in get_loc
raise KeyError(key) from err
KeyError: 0
听到这个消息很抱歉,这可能会有帮助
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
抱歉,但那些都没有帮助:/
我在哪里可以找到您正在使用的这些 keras 函数的文档?我不知道这些函数是如何工作的。
好问题,在这里
https://keras.org.cn/api/
先生您好,我实际上不熟悉 ML,所以有人正在使用 Python 处理我的栅格数据集预测任务。他只提供最终结果和 CSV 文件,而不是作为栅格的最终预测图。您能否指导我 ML 是否像这样工作,或者他在生成最终地图时遗漏了什么?请回复。谢谢
抱歉,我有一个小错误:“最终结果为 CSV 文件”
也许这个框架会有帮助
https://machinelearning.org.cn/start-here/#process
感谢您这个精彩的教程!实际上,我厌倦了观看那些有很多枯燥的演讲和肤浅解释的视频。我发现了我的主要资源!
顺便说一句,我猜这里有一个错误。对吗?
rounded = [round(x[0]) for x in predictions] —> 应该是 “round(X…..”
不客气。
有很多方法可以对数组进行四舍五入。
我的意思是,“x”应该是“X”。对吗?
你好 jason,
希望您一切都好。我正在 Google Colab 中使用 ANN 进行图像分类。我遇到了这个错误,您能帮我找到解决方案吗?
InvalidArgumentError: Incompatible shapes: [100,240,240,1] vs. [100,1]
[[node gradient_tape/mean_squared_error/BroadcastGradientArgs (defined at :14) ]] [Op:__inference_train_function_11972]
Function call stack
train_function
等待您的回复。
抱歉,我不知道 Colab。
https://machinelearning.org.cn/faq/single-faq/do-code-examples-run-on-google-colab
Jason,你好,感谢你的回复。
好的,在 Python 中,我正在处理用于图像分类的 ANN。我遇到了这个错误,你能帮我找到解决方案吗?
InvalidArgumentError: Incompatible shapes: [100,240,240,1] vs. [100,1]
[[node gradient_tape/mean_squared_error/BroadcastGradientArgs (defined at :14) ]] [Op:__inference_train_function_11972]
Function call stack
train_function
抱歉,错误原因尚不清楚,你可能需要调试你的模型。
这里有一些建议。
https://machinelearning.org.cn/faq/single-faq/can-you-read-review-or-debug-my-code
非常感谢,这对我帮助很大。事实上,你所有的文章都很有信息量,并且是我的好向导。
不客气,很高兴听到!
这是一个非常棒的教程,我认为可以改进的地方是增加一个实际预测的例子。
预测部分相当简略,我不太明白如何使用“预测”这个数组来实际预测某事。
比如,如果我想输入一些测试数据并获得预测,我该怎么做?
我会查阅你其他有用的指南,但如果有完整的教程就更好了。
我写这个的时候还没喝咖啡。
我现在明白了,我们是将原始变量传回模型进行预测,并打印出预测值与实际值。
🙂
谢谢——你做了一个很棒的教程!
祝你圣诞快乐,新年快乐。
不客气!
我很高兴它能帮助你开始深度学习之旅。
嗨,Jason,
新年快乐!
你是在用训练模型相同的 X 数据集进行预测。
在这种情况下,我本以为模型会产生接近 100% 的准确率,因为模型经过了专门训练(甚至可能过拟合)。
为什么我们只能得到 76.9% 的准确率,而不是接近 100%?
谢谢
Joe
是的,为了保持示例的简单性,我在这里解释得更详细
https://machinelearning.org.cn/faq/single-faq/why-do-you-use-the-test-dataset-as-the-validation-dataset
没有模型是完美的,它们都在尝试从训练数据中进行泛化。
极好的教程,解释得很好,而且非常容易理解。看来你需要更新一行在 2021 年已被弃用的代码
#而不是
#predictions = model.predict(X)
#现在你必须使用
predictions = (model.predict(X) > 0.5).astype(“int32”)
谢谢。
我不这么认为。
https://keras.org.cn/api/models/model_training_apis/#predict-method
以及
https://tensorflowcn.cn/api_docs/python/tf/keras/Sequential#predict
如果你想要标签,可以使用 model.predict_classes(),这会有帮助。
https://machinelearning.org.cn/how-to-make-classification-and-regression-predictions-for-deep-learning-models-in-keras/
我得到了 65%。
干得好!
你好,我在我的 VirtualEnv 中安装了这些(以及其他库)
Keras==2.4.3
Keras-Preprocessing==1.1.2
但是当我运行这个时
# 使用 Keras 教程的第一个神经网络
from numpy import loadtxt
来自 keras.models import Sequential
from keras.layers import Dense
我在 jupyter 中收到“Dead Kernel”错误消息;第一行运行正常,但在 Keras 处出现“dead kernel”消息。
有什么办法可以解决吗?
谢谢!
我建议不要使用 notebook,因为它们几乎会给每个人带来问题。
https://machinelearning.org.cn/faq/single-faq/why-dont-use-or-recommend-notebooks
而是使用 sublime 或 atom 这样的简单文本编辑器保存代码,并在命令行中运行脚本。
https://machinelearning.org.cn/faq/single-faq/how-do-i-run-a-script-from-the-command-line
谢谢 Jason!我会尝试命令行。
汤姆
不客气。
你好 Jason,我遵循了你的指示,但仍然在 Keras 上遇到问题,也许我没有正确安装?
(rec_engine) tom@machine:~/code$ python keras.py
回溯(最近一次调用)
File “keras.py”, line 3,
来自 keras.models import Sequential
File “/home/tom/code/keras.py”, line 3,
来自 keras.models import Sequential
ModuleNotFoundError: No module named ‘keras.models’; ‘keras’ is not a package
但是当我运行这个时,我确实看到了它已安装
(rec_engine) tom@machine:~/code$ pip list | grep Keras
Keras 2.4.3
Keras-Preprocessing 1.1.2
我遵循了这个指南中的 pip install
https://www.liquidweb.com/kb/how-to-install-keras/
我认为我的下一步可能是为 Keras 和 TensorFlow 创建一个新的 VirtualEnv。
谢谢,Tom
我认为你的环境可能存在问题,或许这个教程会有帮助
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
嗨,Jason博士,
我在 google colab 中执行了你的代码,并且它能够运行,我发现唯一的改动是在预测新数据时
你列出的序列是 10101,而我得到的是 01010
我还对代码做了一些修改。
尽管如此,我的代码至少是可行的。现在我将尝试调整它以获得更高的准确率。
干得好!
你好 Jason,我创建了一个新的虚拟环境并加载了 Keras、TensorFlow 等,然后创建了一个包含你所有代码的 .py 文件,然后在包含 csv 和 py 的目录中从命令行运行它。
但是,我遇到了这个错误
(ML) tom@machine:~/code$ python mykerasloader.py
非法指令(核心转储)
是否有我应该使用的 logger 来查看更多详细信息?
谢谢,Tom
这看起来不太好,我怀疑是你的环境出了问题。
也许你可以尝试在 stackoverflow.com 上发布/搜索。
正在创建神经网络
24/24 [==============================] – 0s 756us/step – loss: 0.3391 – accuracy: 0.8503
准确率:85.03
太棒了!!
干得好!
Brownlee 博士,
早上好,先生!我想问一个问题:运行算法,比如说 50 次并平均准确率是否有价值?我以前使用过这种技术,效果很好,但由于我对它还比较陌生,所以如果有经验丰富的机器老师指导我一下会很有帮助。
如果这是你认为有用的东西,我还有一个问题,这源于我对事物的有限理解:我会在哪里开始‘for’循环?我的第一个想法是在‘model = Sequential()’之前开始,但这会每次重新定义 NN 结构,这没什么意义。第二个想法是在‘model.fit()’之前开始,在这种情况下,模型保持不变,损失函数和优化函数也保持不变。
非常感谢你的时间!
此致,
Jeremy
是的,这可以减少方法的方差,并可用于评估模型性能和进行预测。
更多详情请参见此处
https://machinelearning.org.cn/faq/single-faq/why-do-i-get-different-results-each-time-i-run-the-code
循环围绕着模型的定义、训练和评估。
Jason,有没有关于在此帖子中使用你的代码在 Google Colab 中的教程?我不知道如何使用 Colab 指向 csv。
谢谢,Tom
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/do-code-examples-run-on-google-colab
你好 Jason,我有一个问题。
我想创建一个模型来预测城市发展。我从你上面的模型开始。
我使用城市和非城市点的 4 年(2000、2006、2012、2018)的信息。我还使用了坡度信息和每个点的距离信息。
我创建了一个包含以下列信息的数据集。
2000-2006
2006-2012
训练后,我获得了 94% 的准确率
但是当我将 2006 年输入模型时,它无法很好地预测 2012 年。有很多问题。
我以为有了这个准确率,模型应该能很好地预测 2012 年。
我不知道问题可能出在哪里……在训练部分、预测部分还是其他地方??
请告诉我你的看法,因为我被这个问题困住了几周,需要尽快找到解决方案!!!!
听起来你在处理时间序列数据集。
如果是这样,那么用未来训练模型,用过去预测就是无效的。
我建议从这里开始
https://machinelearning.org.cn/start-here/#deep_learning_time_series
感谢这篇很棒的文章,但我想问一下,accuracy 前面的 _ 是什么意思?
我在网上搜索了,但没找到。
我们在 Python 中使用下划线 (_) 来丢弃我们不关心的返回值或变量。在这种情况下是 loss,因为我们只关心 accuracy。
你好,
将一个形状为 (50385, ) 的数组输入到 MLP 中,其中每个数组都是一个形状为 (x, 127) 的数组
我想将一个 numpy 2D 数组输入到 MLP 中,但我有一个包含 50395 行的数组,其中包含许多形状为 `(x, 129)` 的 2D 数组。`x` 是因为有些矩阵的行数不同。以下是一个例子:
train[‘spec’].shape
>>(50395,)
train[‘spec’][0].shape
>>(41, 129)
train[‘spec’][5].shape
>>(71, 129)
这是我的代码片段:
X_train = train[‘spec’].values; X_valid = valid[‘spec’].values
y_train = train[‘label’].values; y_valid = valid[‘label’].values
model.add(Dense(12, input_shape=(50395, ), activation=’relu’));
model.fit(X_train, y_train, validation_data=(X_valid, y_valid), epochs=500, batch_size=1);
我在最后一行(
model.fit
)遇到了这个错误:ValueError: Error when checking input: expected dense_54_input to have shape (50395,) but got array with shape (1,)
如何解决这个问题,以便网络可以接受形状为 `(x, 129)` 的所有 50395 个矩阵作为输入?
也许它们是“时间步”,如果是这样,这可能会有帮助
https://machinelearning.org.cn/faq/single-faq/what-is-the-difference-between-samples-timesteps-and-features-for-lstm-input
然后将所有序列填充到相同的长度。
https://machinelearning.org.cn/data-preparation-variable-length-input-sequences-sequence-prediction/
事实上,我必须使用 MLP。我将声音频率设置为 16000 赫兹。因此,我所有的音频都产生了一个 16000 个元素的数组。在移除这些音频中的静音后,我得到了大小不同的数组。
然后我使用频谱图算法将这些音频转换为数字的 numpy 矩阵以输入神经网络。
我得到了两个维度的矩阵,它们的列数相同,但行数不同。
在矩阵大小不同的情况下,是否可以输入它们?
作为第一步,也许可以尝试将所有输入填充到相同的大小,然后使用掩码输入层,接着是 dense/mlp 架构。
我按照你说的做了。然后我克服了这个困难!现在我的代码看起来像这样:
model = Sequential();
model.add(Dense(units =8, input_shape=(71, 129), activation=’relu’));
model.add(Dense(units=8, activation=’relu’));
model.add(Dense(units=11, activation=’sigmoid’));
# 编译模型
model.compile(loss=’categorical_crossentropy’, optimizer=’sgd’, metrics=[‘accuracy’]);
#model = mpl_model();
X_train = list(train_df[‘spec’]); X_valid = list(valid_df[‘spec’]);
y_train = train_df[‘label’]; y_valid = valid_df[‘label’];
#labels = [‘yes’, ‘no’, ‘up’, ‘down’, ‘left’,’right’, ‘on’, ‘off’, ‘stop’, ‘go’];
encoder = LabelEncoder();
encoder.fit(y_train);
encoded_y_train = encoder.transform(y_train);
dummy_y_train = to_categorical(encoded_y_train);
# Fit model , validation_data=(np.array(X_valid), y_valid)
model.fit(np.array(X_train), np.array(list(dummy_y_train)), epochs=50, batch_size=50);
然后我收到了这个错误:
ValueError: A target array with shape (50395, 11) was passed for an output of shape (None, 71, 11) while using as loss
categorical_crossentropy
. This loss expects targets to have the same shape as the output.哎呀,看起来数据的形状与模型的预期不符。
也许可以关注准备好的数据,并在每次更改后检查它——先弄清楚数据,然后再关注建模部分。
好的。已经完成了,并且运行良好。谢谢!
干得好!
你好,谢谢这个教程。
100 次迭代我得到了 76.82 的准确率分数。
干得好!
这是一个很棒的教程,可以实现你在 Python 中的第一个深度神经网络。谢谢你,亲爱的 Jason Brownlee。
谢谢,你做得很好!
你好,
我目前卡在拟合模型。我唯一做的不一样的地方是使用 read_csv,这样我就不必把任何东西放到本地。但我已经验证了 X/y 的输出是相同的。
我的错误是:
ValueError: logits and labels must have the same shape ((None, 11) vs (None, 1))
这表明你的数据没有正确加载,也许这会有帮助
https://machinelearning.org.cn/load-machine-learning-data-python/
啊,谢谢,原来是 sigmoid 层节点数错误的问题。
很高兴听到你解决了问题!
又一个很棒的教程!!
当我运行程序时,它崩溃并出现如下错误:
2021-02-23 18:50:50.497125: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library ‘cudart64_101.dll’; dlerror: cudart64_101.dll not found
2021-02-23 18:50:50.498601: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
回溯(最近一次调用)
File “C:/Users/USER/PycharmProjects/Sofia/main.py”, line 26, in
X = dataset[:,0:8]
File “C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py”, line 3024, in __getitem__
indexer = self.columns.get_loc(key)
File “C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\indexes\base.py”, line 3080, in get_loc
return self._engine.get_loc(casted_key)
File “pandas\_libs\index.pyx”, line 70, in pandas._libs.index.IndexEngine.get_loc
File “pandas\_libs\index.pyx”, line 75, in pandas._libs.index.IndexEngine.get_loc
TypeError: ‘(slice(None, None, None), slice(0, 8, None))’ is an invalid key
我该如何修复这个错误?预先感谢!
谢谢!
听到这个消息很遗憾,也许这些提示会有帮助
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
看起来
model.predict_classes()
在 2021-01-01 被弃用了。祝好,
Slava
谢谢。
新的方法是什么?我训练完后无法运行 predict 方法。
这会有帮助
https://machinelearning.org.cn/how-to-make-classification-and-regression-predictions-for-deep-learning-models-in-keras/
Jason,我对层以及它们如何选择滤波器有几个问题。
model = Sequential()
model.add(Dense(12, input_dim=8, activation=’relu’))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation=’sigmoid’)
1) 上述每层的滤波器尺寸是多少?3x3 还是 7x7。
2) 有没有预定义的 3x3 滤波器、7x7 滤波器?
3) 在隐藏层中,滤波器通常用于产生下一层。模型如何选择滤波器?例如,如果一层有 16 个节点,我如何选择 32 个滤波器,以便下一层有 32 个节点(神经元)?
当你创建一个模型时,是否需要为每一层指定所需的滤波器?例如滤波器的大小和数量。
谢谢!
Dense 层中没有滤波器,滤波器是卷积层才有的东西。
https://machinelearning.org.cn/convolutional-layers-for-deep-learning-neural-networks/
你好,杰森
我有一个问题!你能帮我吗?
当我 predict_classes(Z) 时(Z=[100,100,100,100,100,100,100,100]),如你所见,这些数据差异很大,但输出仍然是 0 或 1。我想要输出 = “不知道标签” :((((( 我该怎么做,请帮帮我。
非常感谢您,先生。
抱歉,我没明白。
也许你可以重新表述一下你的问题?
这是一个很棒的博客。继续保持良好的工作。
谢谢!
准确率:79.53
干得好!
我正在尝试在 las 文件中训练渗透率数据,然后进行预测。请帮忙。
也许这个过程能帮助你完成项目。
https://machinelearning.org.cn/start-here/#process
accuracy: 0.7865
准确率:78.65
干得好!
对于分类特征,我如何防止 Keras 模型对训练集中未见过的测试样本进行预测,而是使用另一个模型或抛出异常?
抱歉,我不明白。也许您可以详细说明?
您创造和提供的所有内容都非常棒。
信息量大,非常及时,而且清晰明了。
谢谢!
不客气。
File “/Users/ronaldssebadduka/PycharmProjects/pythonProject1/venv/lib/python3.9/site-packages/numpy/lib/npyio.py”, line 1067, in read_data
items = [conv(val) for (conv, val) in zip(converters, vals)]
File “/Users/ronaldssebadduka/PycharmProjects/pythonProject1/venv/lib/python3.9/site-packages/numpy/lib/npyio.py”, line 1067, in
items = [conv(val) for (conv, val) in zip(converters, vals)]
File “/Users/ronaldssebadduka/PycharmProjects/pythonProject1/venv/lib/python3.9/site-packages/numpy/lib/npyio.py”, line 763, in floatconv
return float(x)
ValueError: could not convert string to float: ‘\ufeff”6’
运行您的代码时,我遇到了这个错误!
我该如何解决?
很抱歉听到这个消息,也许这些提示会有帮助。
https://machinelearning.org.cn/faq/single-faq/why-does-the-code-in-the-tutorial-not-work-for-me
内容解释得很简单,也很清楚。谢谢Jason
不客气。
请您务必帮我构建一个多层感知机,用于回归问题。谢谢!
好的,请看这里:
https://machinelearning.org.cn/regression-tutorial-keras-deep-learning-library-python/
非常感谢您的教程!我在输入层上遇到了困难,Keras的帮助文档也没有帮助。但您的解释给了我启发,一切都变得清晰明了!非常棒,谢谢!
不客气!
干得漂亮,先生。复杂事物的简单、详细的解释。
我想学习神经网络在DDoS攻击检测方面的建模。请给出建议。
先谢谢了。
如果您将问题建模为时间序列,这里的教程可能会有帮助
https://machinelearning.org.cn/start-here/#deep_learning_time_series
非常感谢。我会看看的,先生。
不客气。
以下是我在我8GB内存64位Windows 10平台上连续执行前10次的输出结果
Accuracy: 65.49
Accuracy: 70.70
Accuracy: 75.91
Accuracy: 76.04
Accuracy: 78.26
Accuracy: 76.04
Accuracy: 77.86
Accuracy: 79.17
Accuracy: 78.52
Accuracy: 78.91
我的电脑没有GPU。脚本给出了一些警告信息。其中一条是:“None of the MLIR Optimization Passes are enabled (registered 2)”
干得好!
你好,
我有一个关于输入量的问题。我正在尝试为分类模型拟合一个神经网络。然而,我模型中的特征是分类的,所以我需要进行独热编码。例如,如果一个分类变量有3个值,并且我对其进行独热编码,那么‘input_dim’会是1还是3?
是的,分类变量需要进行编码。
当使用独热编码时,3个类别将变成3个二元输入变量。
我的结果
Accuracy:75.78
Accuracy:78.26
Accuracy:76.30
Accuracy:77.47
Accuracy:77.47
干得好!
嗨,Jason,
感谢您提供的所有内容。对于初次接触Keras和机器学习的人来说,都非常有启发性。如果您能就我正在尝试解决的以下问题提供任何指导/见解,我将不胜感激。
我正在尝试复制一个类似的球预测模型,正如这里讨论的:
https://towardsdatascience.com/predicting-t20-cricket-matches-with-a-ball-simulation-model-1e9cae5dea22
这是一个多分类问题(感谢您关于此的文章)。我有8个输出需要预测(0, 1, 2, 3, 4, 6, Wide, Wicket),在我的数据集中是H列(https://i.stack.imgur.com/DmTNb.png)。
这个数据集是许多板球比赛的逐球(比赛)数据。A-G列是输入变量,应该用于预测每个结果(局、回合、击球手、投球手等)的概率。
模型
X = my_data[:,0:7]
y = my_data[:,7]
model = Sequential()
model.add(Dense(12, input_dim=7, activation=’relu’))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation=’sigmoid’))
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
model.fit(X, y, epochs=150, batch_size=10, verbose=0)
_, accuracy = model.evaluate(X, y, verbose=0)
print(‘Accuracy: %.2f’ % (accuracy*100))
在逐球数据集上运行上述模型可以得到30%的准确率。正如文章所建议的,我想包含更多数据,即每个击球手和投球手达到每个结果的历史概率。
这意味着我有3个数据集应该用来影响每个结果的概率。
我应该如何以及何时尝试引入这3个链接的数据集?我想让模型同时考虑所有这些信息,而不是孤立地考虑。
这是不是意味着要尝试将击球手/投球手数据集合并到比赛数据中?我唯一担心的是,比赛数据大约有200,000行,而球员数据库大约有500行。
也许我错了,我应该单独运行多个数据集通过模型,然后以某种方式汇总结果——这是否可能?尽管我认为这可能不值得/不值得
如果您对如何改进上述方法或实现预期结果有任何建议,我将非常感激。
再次感谢您在维护一个很棒的数据科学网站方面所做的辛勤工作。
为模型定义数据/问题是应用机器学习中的真正工作。
没有好/最佳的方法,我建议阅读有关该主题的论文以获取灵感,原型制作,实验等。
此外,这可能也有助于定义问题
https://machinelearning.org.cn/how-to-define-your-machine-learning-problem/
此外,更普遍地说,这些教程解释了如何从神经网络中获得更好的性能
https://machinelearning.org.cn/start-here/#better
嗨,Jason!
感谢您提供所有这些内容。我正在尝试通过使用我自己的csv文件来复制这个模型,但是它包含许多NaN,因此无法通过loadtxt()函数加载。由于0在我的数据集中是一个非常重要的数字,我不能将我的NA替换为0。我该怎么办?
再次感谢您的所有帮助。
您必须先进行缺失值插补,有很多方法
https://machinelearning.org.cn/?s=missing&post_type=post&submit=Search
我忘了提,但有没有办法保留NaN并让模型将其读取为缺失值?将NaN分配一个特定值对我来说会很困难,因为它可能会弄乱数据集。
不可以。NaN会使ML模型(包括神经网络)中的所有计算都失败。
非常感谢Jason博士,本教程对我帮助很大。
不客气!
本教程构建了一个神经网络,但这个神经网络具体是什么?它是ANN、CNN还是RNN?
它是一个多层感知机(MLP),这是一种前馈神经网络。它不是CNN或RNN。
首先,非常感谢Jason Brownlee让我开始了我的第一个深度学习项目。我一步一步地跟着做,但卡住了好一阵子;然而,经过无数小时的研究,我发现我的代码在Python 3.8.10、Tensorflow 2.5.0、IPython 7.26.0和Keras 2.6.0的环境下可以工作。如果我注释过多,我很抱歉,我在阅读Jason的源代码和注释时一直在做笔记。我使用了Anaconda-Spyder,并且想在Jupyter Notebook中也看到结果。希望这对您有帮助
import sys
import tensorflow as tf
from tensorflow import keras
from numpy import loadtxt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 加载数据并分割X(输入)和y(输出)变量
# 确保您的数据与项目在同一位置
dataset = loadtxt(r’pima-indians-diabetes.csv’, delimiter=’,’)
X = dataset[:,0:8]
y = dataset[:,8]
# 创建我们的顺序模型
# input_dim 设置输入变量数量的参数
# 这个结构有三个层
# 全连接层由dense类定义
# 有关dense类更多信息,请查看Keras主页
# 第一层和第二层使用ReLU,输出层(第三层)使用Sigmoid函数
# 默认阈值为0.5,ReLU性能更好
# ReLU衡量输出在0到1之间,如概率所示
# 模型期望的输入数据行有8个变量(input_dim=8参数)
# 第一个隐藏层有12个节点,使用relu激活函数。
# 第二个隐藏层有8个节点,使用relu激活函数。
# 输出层有1个节点,使用sigmoid激活函数。
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer=’normal’, activation=’relu’))
model.add(Dense(8, kernel_initializer=’normal’, activation=’relu’))
model.add(Dense(1, kernel_initializer=’normal’, activation=’sigmoid’))
# Compile the model
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 在数据集上拟合模型
# Epoch:通过训练数据集中所有行的单次迭代。
# Batch:在每个epoch中,模型考虑的一个或多个样本,然后更新权重。
# CPU或GPU处理这些,通常,较大的数据集需要GPU
model.fit(X, y, epochs=150, batch_size=10, verbose=0)
# 评估数据
_, accuracy = model.evaluate(X, y, verbose=0)
print(‘Accuracy: %.2f’ % (accuracy*100))
# 使用模型进行概率预测
predictions = model.predict(X)
# 四舍五入预测结果
rounded = [round(x[0]) for x in predictions]
做得好!
我使用的是Windows系统笔记本电脑,我不知道我是否应该安装Linux发行版。> 我不确定在哪里下载数据集。> 他提到:“与python安装在同一个地方”,这是什么意思?
对于像我这样没有技术背景的初学者来说,这简直是个谜。
通常这意味着您只需要将数据文件和Python代码文件放在同一个文件夹下。
你好
感谢这个很棒的教程🙂
问题1:我们可以在Apache Spark中应用深度学习吗?
问题2:我有以下数据集 https://www.kaggle.com/leandroecomp/sdn-traffic
我尝试了多类分类代码,但它停止工作了。这可能是什么原因?
谢谢
(1) 是的 (2) 具体是什么停止工作了?
首先,我被评论的数量和作者及时的回复所淹没。您真是许多人的救星,Jason。
现在,我有一个疑问。我一直在寻找一个简单的前馈反向传播ANN代码在python中,我只看到了前馈神经网络。在您的示例中,是否发生了反向传播?ANN是否默认意味着这两个过程?
我们通常不应该在ANN中应用反向传播吗?
当你给ANN输入数据时,会发生前馈。当你计算梯度并更新每个神经元的权重时,会发生反向传播。
所以,我认为(反向传播)在上面的教程中没有发生。您能展示一下如何在python中编写反向传播代码,或者指导我去看相关的帖子吗?
谢谢。
当您调用fit()函数时,反向传播用于更新模型参数。这是训练过程的一部分。我们通常不会显式地进行。如果您有兴趣,请在此处查看一个玩具示例:https://machinelearning.org.cn/implement-backpropagation-algorithm-scratch-python/
嗨,非常感谢您提供的这个精彩教程。我正在使用tensorflow版本2.6,并在使用以下代码行进行类预测时:
predict_x = model.predict(X)
classes_x = np.argmax(predict_x,axis=1)
for i in range(5)
print(‘%s => %d (expected %d)’ % (X[i].tolist(), classes_x[i], y[i]))
输出是
[6.0, 148.0, 72.0, 35.0, 0.0, 33.6, 0.627, 50.0] => 0 (expected 1)
[1.0, 85.0, 66.0, 29.0, 0.0, 26.6, 0.351, 31.0] => 0 (expected 0)
[8.0, 183.0, 64.0, 0.0, 0.0, 23.3, 0.672, 32.0] => 0 (expected 1)
[1.0, 89.0, 66.0, 23.0, 94.0, 28.1, 0.167, 21.0] => 0 (expected 0)
[0.0, 137.0, 40.0, 35.0, 168.0, 43.1, 2.288, 33.0] => 0 (expected 1)
为什么所有的classes_x都是零?
因为这里的预测是二元的,所以predict_x是Nx1矩阵,argmax只会报告0。您的语法对于多类来说是正确的,在这种情况下,神经网络的输出层是Dense(n),其中n>1。
我已经更新了这里的示例代码以反映您应该执行的操作。感谢您的提醒。
你好,这很有帮助。我正在学习神经网络,我只是一个初学者。你说这是MLP类型的神经网络,对吧?我想问一下,这个呢?这里使用了什么样的神经网络架构?是RNN吗?ANN?还是LTSTM?链接如下
https://towardsdatascience.com/how-to-create-a-chatbot-with-python-deep-learning-in-less-than-an-hour-56a063bdfc44
MLP = 多层感知机,通常指拥有3层或更多层的神经网络。您提供的链接使用了Dense(),这是全连接层。因此,它也是MLP。
嗨Jason和Adrian,我偶然发现了您非常好的教程,因为我有一个类似的问题。
我有一个工程问题的几个数值过程参数(与您的教程中的输入参数类似),我想将其与一个结果值进行比较(这与您的教程不同,又是一个数值,而不是分类)。您能告诉我(或者您是否知道一个像这样的合适教程),我需要如何修改代码?
非常感谢!
在我看来,这是一个回归问题而不是分类问题。在这种情况下,您可以考虑更改两件事:
1.最后的Dense()层,您可能想要一个不同的激活函数(例如,线性?)因为sigmoid的输出被限制在0到1之间。
2. model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])应该更改损失和度量。例如,您可以考虑使用MSE,因为交叉熵和准确率是分类特有的度量。
太棒了,服务周到,非常有帮助,我正在分享给我的学生们,愿主保佑您,阿门
很棒的教程,非常详细。但我有一个问题,
如何提高验证损失和验证准确率?我是神经网络的新手。我只触及了它的表面。权重、偏置、激活函数、损失函数、架构以及如何在keras中构建层以及其他基本术语(感谢您和YouTube上的deeplizard教程)。我正在学习和练习它,我想尝试复制一些项目,我偶然发现了这个教程,来自Dataflair,他正在创建一个聊天机器人,我试着模仿它。链接:https://data-flair.training/blogs/python-chatbot-project/
根据我的观察和我的学习,他创建的模型是ANN-MLP。我的问题是,当我训练模型并设置validation_split = 0.3时,训练损失和准确率都很好,但验证损失和准确率却相反。我知道这可能是过拟合问题,所以……
我所做的是:
-添加了L2正则化
-减慢了学习率,我也尝试加速它
-Dropout(0.2-0.5)
-Batch Size
-移除层
-添加层
-尝试了不同的激活函数和损失函数(sigmoid, softplus, binary_crossentropy)
-我甚至尝试向我的数据集添加数据(从320到796个输入)
我尝试了所有这些,但val_loss和val_acc仍然很高和低。
(我做得最好的结果是:loss: 0.1/accuracy 98%,val loss: 1.9/val_accuracy: 52%。
而最糟糕的是val_loss:超过3.0,val_accuracy:35-40%。)
我使用的数据集来自dataflair,但我对其进行了扩展。这是我的可视化模型:https://i.stack.imgur.com/HE1jU.png
我真的说不清哪里出错了。您在训练时验证了验证损失吗?起初,训练损失和验证损失应该同样糟糕。它们在每个训练epoch中是如何进展的?这可能会给您一些线索。
是的,我都训练和验证了。它们一开始都很糟糕,随着训练的进行,损失得到了很大的改善,但val_loss和val_accuracy只改善了一点点。T_T
这是正常的。您的模型关注了训练损失并试图改进自身,但它无法看到验证数据,因此改进起来更难、更慢。
您的书籍帮助我极大地理解了LSTM,我在开发注意力层时遇到了麻烦,您能出一个关于使用Attention/MultiheadAttention的教程吗?
谢谢你。
请参阅系列:https://machinelearning.org.cn/category/attention/
对于这个数据集,ANN的准确率在70-78%之间。使用逻辑回归,我们对同一数据集的准确率为78%。那么,使用ANN有什么优势呢?
ANN更加灵活。奥卡姆剃刀原则——你使用最简单的模型来完成工作。如果逻辑回归拟合得很好,你没有理由使用ANN。它占用更多内存,运行速度更慢。
感谢教程
我尝试了您的方法,并且在我的数据上运行得很好。作为第一次尝试,我只使用了过程结束后的测量数据(例如,过程时间、过程中的温差等)。为了进一步深入研究,我想使用测量数据曲线,例如过程本身的温度随时间的变化。通过使用这些曲线,我期望获得更高的信息量。
您能否提示一下如何处理这些数据?作为第一次尝试,我简单地生成了一个表格,其中前6列是我的过程参数,第7列是我的输出值,可以轻松地输入到模型中。
非常感谢!
一切听起来都很直接。您尝试过实现它吗?有错误吗?
说实话,我不知道如何提供数据。在第一种情况下,我有一个包含7列的表格:6个输入过程参数和1列输出值。
现在我想用时间记录的数据曲线替换(或添加)一些输入列,例如,第一列是时间戳,第二列是时间相关的过程参数。我该如何处理?
通常我会使用pandas来处理数据并将其转换为numpy数组,然后再输入到Keras模型中。Pandas可以更方便地处理表格。
可能需要调整导入设置以兼容较新版本的Tensorflow。
而不是
…
来自 keras.models import Sequential
from keras.layers import Dense
使用
…
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
使用Conda解决了我的问题。
感谢您提供的出色教程和文章!!
感谢您的反馈Rick!我也经常尝试在Anaconda和Google Colab中运行代码,以识别和纠正兼容性问题。
我的准确率:76.95
感谢您的代码和详细的解释
不客气,Preeti!继续加油!
你好 James
干得好
不用说神经网络,这让我陷入了深入的思考。
我正在Thonny上,在64位OS的pi 400上运行您的教程。
在这台机器上运行效果相当好。
然而,在您提供的一个示例中遇到了错误……使用‘ pima-indians-diabetes.csv’的Keras神经网络
“from tensorflow.python.eager.context import get_config”
ImportError: cannot import name ‘get_config’ from ‘tensorflow.python.eager.context’ (/usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/context.py)”
因此,我发现错误在于Keras.models和layers,并已按照以下方式修改了代码:
# 使用 Keras 教程的第一个神经网络
from numpy import loadtxt
from tensorflow.keras import models,layers #********************
#from keras.models import Sequential #******************
#from keras.layers import Dense #********************
# 加载数据集
dataset = loadtxt(‘/home/pi/Documents/pima-indians-diabetes.csv’, delimiter=’,’)
# 分割为输入 (X) 和输出 (y) 变量
X = dataset[:,0:8]
y = dataset[:,8]
# 定义 Keras 模型
model = models.Sequential() #********************
model.add(layers.Dense(12, input_dim=8, activation=’relu’)) #********************
model.add(layers.Dense(8, activation=’relu’)) #********************
model.add(layers.Dense(1, activation=’sigmoid’)) #********************
# 编译 Keras 模型
model.compile(loss=’binary_crossentropy’, optimizer=’adam’, metrics=[‘accuracy’])
# 在数据集上拟合 Keras 模型
model.fit(X, y, epochs=150, batch_size=10)
# 评估 Keras 模型
_, accuracy = model.evaluate(X, y)
print(‘Accuracy: %.2f’ % (accuracy*100))
现在这产生了
准确率:74.35
嗨 Alan……谢谢你的反馈和支持!将其应用于Raspberry Pi很有趣!请记住,我们的实现可能与为该平台开发的库不完全兼容。继续保持出色的工作!
你好,
精彩教程!简单易懂。我尝试了在我的数据集上做同样的事情,但是最后的for循环似乎不起作用。您能帮我解决吗?
这是for循环
for i in range(5)
print(‘%s => %d (expected %d)’ % (X[i].tolist(), predictions[i], y[i]))
谢谢
嗨 Nishanth……你是复制粘贴代码还是自己输入的?请注意复制粘贴代码以及它如何影响代码布局,因为错误可能很难在视觉上发现。
嗨,在评论中,print语句看起来没有缩进,但在我的代码中,我缩进了它,但它仍然不起作用。
嗨 Nishanth……请参阅之前的回复。
你好,
精彩教程!简单易懂。我在我的数据集上尝试了它,但最后的for循环,即打印前5个示例的for循环不起作用。它给了我KeyError: 0
你能帮我解决吗?
谢谢
嗨 Nishanth……请分享完整的错误消息,以便我们更好地帮助您。
找到了解决办法。问题是这里的数据集是numpy数组,而我的数据集是pandas.DataFrame。谢谢您的帮助。
嗨 Nishanth,
您能否分享一下您是如何解决最后的Keyerror的?
你好 Jason,
非常棒的教程
当我运行代码时,一切都正常,除了在打印预测时出现key error。
嗨 N V……您能提供确切的错误消息,以便我们更好地帮助您吗?
您好,我学习了同一个教程,在您的一门迷你课程中,在Keras中开发第一个神经网络。为了在我自己的数据集上开发我的模型,我尝试改编了这个教程。问题是我的目标Y是计数数据(例如流量数据)。在这种情况下,我如何定义输出层的激活函数?是relu吗?如何选择损失函数?我尝试了MeanSquaredError,损失值很大,或者categorical_crossentropy,损失值为nan。我正在考虑订购《Python深度学习》完整版。书中内容与迷你课程有什么区别?
嗨 Susia……以下资源可以帮助您了解如何选择激活函数。
https://machinelearning.org.cn/choose-an-activation-function-for-deep-learning/
先生,非常感谢您精彩的文章
您能否解释一下在深度学习中如何将X和y分割为训练集和测试集?
这段代码在这里是否正确?
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
嗨 Nasrin……您提供的示例代码看起来是准确的。请随时实施,如果您遇到任何问题,请告知我们。
24/24 [==============================] – 0s 489us/step – loss: 0.4517 – accuracy: 0.7956
准确率:79.56
使用Keras的深度学习MNIST数据集
from cgi import test
from pyexpat import model
import numpy as np
来自 keras.models import Sequential
from keras import layers
#from keras.layers import Convolution2D, MaxPooling2D #train on image data
from keras.utils import np_utils #veri dönüşümü için gerekli
from keras.datasets import mnist #image data
(X_train, y_train), (X_test, y_test) = mnist.load_data()
print(“Reshape öncesi”,X_train.shape)
X_train = X_train.reshape(-1, 28, 28, 1)
X_test = X_test.reshape(-1, 28, 28, 1)
print(“Reshape sonrası”,X_train.shape)
X_train = X_train.astype(‘float32’)
X_test = X_test.astype(‘float32′)
X_train /= 255
X_test /= 255
Y_train = np_utils.to_categorical(y_train)
Y_test = np_utils.to_categorical(y_test)
model = Sequential()
model.add(layers.Convolution2D(32, 3, 3, activation=’relu’, input_shape=(28,28,1)))
model.add(layers.Convolution2D(32, 3, 3, activation=’relu’))
model.add(layers.MaxPooling2D(pool_size=(2,2)))
model.add(layers.Dropout(0.25))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation=’relu’))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(10, activation=’softmax’))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(X_train, Y_train,
batch_size=32, epochs=10, verbose=1)
test_loss, test_acc = model.evaluate(X_test, Y_test, verbose=0)
print(“Test Loss”, test_loss)
print(“Test Accuracy”,test_acc)
深度学习与data_diagnosis数据集
import imp
from pickletools import optimize
from random import random
from statistics import mode
from tabnanny import verbose
from warnings import filters
from matplotlib.pyplot import axis
import pandas as pd
import numpy as np
dataSet = pd.read_csv(“.\data_diagnosis.csv”)
dataSet.drop([“id”,”Unnamed: 32″],axis=1,inplace=True)
dataSet.diagnosis = [1 if each == “M” else 0 for each in dataSet.diagnosis]
y=dataSet.diagnosis.values
x_data=dataSet.drop([“diagnosis”],axis=1)
x_data.astype(“uint8”)
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
x=scaler.fit_transform(x_data)
from keras.utils import to_categorical
Y=to_categorical(y)
from sklearn.model_selection import train_test_split
trainX,testX,trainy,testy=train_test_split(x,Y,test_size=0.2,random_state=42)
trainX=trainX.reshape(trainX.shape[0],testX.shape[1],1)
testX=testX.reshape(testX.shape[0],testX.shape[1],1)
from keras import layers
from keras import Sequential
verbose,epochs,batch_size=0,10,8
n_features,n_outputs=trainX.shape[1],trainy.shape[1]
model= Sequential()
input_shape=(trainX.shape[1],1)
model.add(layers.Conv1D(filters=8,kernel_size=5,activation=’relu’,input_shape=input_shape))
model.add(layers.BatchNormalization())
model.add(layers.MaxPooling1D(pool_size=3))
model.add(layers.Conv1D(filters=16,kernel_size=5,activation=’relu’))
model.add(layers.BatchNormalization())
model.add(layers.MaxPooling1D(pool_size=2))
model.add(layers.Flatten())
model.add(layers.Dense(200,activation=’relu’))
model.add(layers.Dense(n_outputs,activation=’softmax’))
model.summary()
print(‘başladı’)
import keras
import tensorflow
#model.compile(loss=’categorical_crossentropy’,optimizer=’adam’,metrics=[‘accuracy’])
model.compile(loss=’binary_crossentropy’,
optimizer=tensorflow.keras.optimizers.Adam(),
metrics=[‘accuracy’]) # 编译
dataSet.info()
model.fit(trainX,trainy,epochs=epochs,verbose=1)
_,accuracy=model.evaluate(testX,testy,verbose=0)
print(accuracy)
感谢您的反馈 Jack!继续保持出色的工作!
24/24 [==============================] – 0s 1ms/step
[6.0, 148.0, 72.0, 35.0, 0.0, 33.6, 0.627, 50.0] => 1 (expected 1)
[1.0, 85.0, 66.0, 29.0, 0.0, 26.6, 0.351, 31.0] => 0 (expected 0)
[8.0, 183.0, 64.0, 0.0, 0.0, 23.3, 0.672, 32.0] => 1 (expected 1)
[1.0, 89.0, 66.0, 23.0, 94.0, 28.1, 0.167, 21.0] => 0 (expected 0)
[0.0, 137.0, 40.0, 35.0, 168.0, 43.1, 2.288, 33.0] => 1 (expected 1)
我的准确率为77.99,但这里显示为100,这正确吗?
感谢您的反馈 Jack!
您好。
感谢您的教程。非常有用。
我有一个问题。这是一个用于二元分类的教程。
但是,我想构建一个前馈神经网络,它预测多个变量(输出层中的多个神经元),这些变量的值在0到1之间(例如0.956、0.878、0.897等),与本教程中的情况不同,在本教程中,要预测的变量仅取0或1的值。
我尝试将此教程中开发的网络应用于此目的,但结果不佳。
我的测试数据集有257个观测值。如果我应用此网络,预测数组将由257个值组成(每个观测值一个),但这些值都相同(例如1:0.985;2:0.985;3:0.985;……;256:0.985;257:0.985)。希望我已解释清楚。
是否有适合我的问题的Keras模型/函数(即预测一个非0或1的变量)?
感谢您的帮助。
Nicola Menga。
嗨 Nicola……请澄清和/或详细说明您的问题,以便我们更好地为您提供帮助。
你好,
我在使用Anaconda的Spyder控制台中用Keras制作的NN模型时,总是收到警告。
警告如下:
WARNING: AutoGraph could not transform <function Model.make_test_function..test_function at 0x0000011A030555E0> and will run it as-is.
Cause: Unable to locate the source code of <function Model.make_test_function..test_function at 0x0000011A030555E0>. Note that functions defined in certain environments, like the interactive Python shell, do not expose their source code. If that is the case, you should define them in a .py source file. If you are certain the code is graph-compatible, wrap the call using @tf.autograph.experimental.do_not_convert. Original error: lineno is out of bounds
To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert
如果您能帮助我解决这个问题,我将不胜感激。
你好 James Carmichael,
感谢您的所有努力。作为一个初学者,我能够运行您的示例代码并逐行阅读代码的功能。一段非常激动人心的旅程开始了……我的问题是,我输入了不同的数据,其中第一行有12个变量输入,第12个是输出结果,但在第5列或第6列下方是什么。我该如何处理数据集中的这类输入?我的数据集在读取时出错。
19 2 49 156 782 394 296.4 723.7 809.4 29.87 53.78 86
740 366
728 398
659 161
704 220
795 173
784 385
732 282
18 1 60 172 850 1455 794 670 28.44 80.74 90
873
842
817
749
797
849
850
847
842
嗨 sukh……非常欢迎!您是否收到任何错误消息可以分享?这将使我们能更好地帮助您。
好的,谢谢。实际上,我的数据文件是csv格式。我能够读取它。但在创建数组时遇到了问题。我的一个输入有多个行,而且大部分都在列下方展开。意味着数据不在一行中。每个输入都以相同的方式处理。请就如何在此类输入中创建数组提出建议。或者我是否需要将数据放在E列的一个单元格中,以使数据在一行中,最后一列K是输出结果。我的第二个输入从第411行开始。希望您能理解我的数据输入关系。下方是代码和数据。
我的问题是……我们能否以这种方式输入数据?如果可以,我该如何声明我的数据集以进行进一步处理?
from numpy import loadtxt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from google.colab import files
uploaded = files.upload()
import csv
# opening the CSV file
with open(‘dataread.csv’, mode =’r’)as file
# reading the CSV file
csvFile = csv.reader(file)
print(csvFile)
# displaying the contents of the CSV file
for lines in csvFile
print(lines)
19 2 49 156 782 296.4 723.7 809.4 29.87 53.78 86
740
728
659
704
795
784
732
744
764
777
749
700
729
722
741
790
783
736
744
781
810
745
722
734
736
750
706
744
789
851
813
750
783
786
758
731
742
708
733
720
673
689
729
700
781
786
758
717
773
802
726
719
734
707
678
754
747
715
771
830
786
751
773
811
824
820
772
760
814
735
687
726
771
733
773
822
858
806
756
783
775
776
739
730
796
775
754
721
744
764
793
742
734
774
802
759
735
744
767
735
723
691
748
719
749
846
822
749
753
825
854
817
754
737
785
803
785
746
736
783
741
737
694
814
754
761
814
823
785
733
759
786
814
763
792
851
813
795
751
759
780
760
738
760
801
767
738
673
697
673
664
691
783
821
823
807
746
775
822
827
763
732
756
750
814
766
733
772
813
792
722
777
793
813
757
747
817
805
788
802
754
772
788
847
781
749
763
814
838
748
749
760
788
720
685
697
658
684
807
843
759
730
750
807
774
748
715
779
803
818
755
768
800
787
759
798
838
843
775
801
814
750
716
745
758
779
721
717
768
744
773
758
724
730
774
744
772
733
663
671
654
762
820
818
797
770
847
827
818
751
726
760
779
804
790
755
768
820
812
852
759
787
825
782
766
746
808
793
791
745
787
800
844
733
739
780
783
739
726
745
796
800
752
796
804
813
735
726
739
699
665
648
678
779
801
798
822
772
824
837
795
739
714
771
802
761
727
773
789
917
876
788
788
810
790
770
789
787
771
743
796
848
853
769
807
817
831
817
766
817
766
707
668
702
821
817
828
799
765
795
817
798
751
792
832
831
776
764
806
811
760
747
802
823
755
754
800
823
792
750
805
818
793
752
748
741
736
736
685
749
719
766
905
857
760
741
774
815
773
746
778
846
825
775
800
819
767
780
804
896
812
757
811
819
817
779
774
791
818
770
754
771
786
753
744
793
805
799
18 1 79 159 532 1182 1486 1744 51.75 83.64 76
354
831
848
466
442
837
842
401
347
721
699
945
1001
869
837
889
935
823
876
817
821
951
878
929
799
790
849
838
822
957
933
803
767
840
905
794
710
756
1004
966
858
809
955
930
944
820
809
823
821
905
894
890
869
856
819
762
724
695
797
794
745
894
966
923
875
896
911
859
925
863
862
884
900
827
937
936
912
932
819
800
770
1008
921
806
924
881
848
953
893
871
926
991
889
867
913
815
901
888
815
834
876
899
849
982
886
883
867
914
928
986
868
888
957
922
895
861
828
874
834
798
862
1016
864
904
926
838
939
924
885
890
941
897
863
1034
906
842
866
862
832
896
913
881
875
916
914
878
957
890
793
759
804
1003
786
868
955
840
848
938
884
886
928
889
873
966
927
913
884
868
846
900
882
836
847
910
901
874
835
870
882
814
761
857
742
719
729
947
823
822
782
914
858
850
891
1003
836
1034
873
867
846
799
860
772
784
787
991
936
909
1071
1039
1037
1065
966
1022
1023
963
959
897
870
886
881
854
943
975
869
918
900
890
960
995
853
927
926
892
970
956
881
901
997
858
924
840
852
995
1076
896
967
942
910
1050
994
993
1024
915
972
942
866
866
854
837
945
955
912
930
914
927
995
987
850
838
757
727
705
744
962
859
854
919
905
900
1002
868
858
945
890
831
863
854
901
980
917
886
944
898
977
817
747
728
777
834
908
850
792
811
964
872
834
870
937
849
910
858
834
874
936
867
825
831
891
890
912
907
938
873
873
893
891
875
959
914
872
946
875
797
888
893
810
1069
977
925
900
874
18 1 60 172 850 1455 794 670 28.44 80.74 90
873
842
817
749
797
849
850
847
842
809
779
739
737
746
763
854
935
911
863
832
820
775
756
819
820
810
787
766
837
843
867
820
749
726
759
823
763
761
769
767
767
736
796
864
871
833
780
785
741
697
659
659
696
794
975
866
784
820
825
800
780
752
812
775
741
709
676
675
656
674
686
691
694
714
707
743
753
741
712
717
733
730
735
735
759
750
746
750
739
775
757
715
703
730
831
844
811
749
775
795
826
819
812
820
878
925
885
840
796
794
830
870
876
863
846
815
825
919
910
859
803
795
839
887
844
813
841
891
854
836
806
785
813
855
880
816
854
886
897
811
811
847
873
841
774
735
750
820
805
824
832
828
832
916
903
894
854
817
846
859
891
891
852
836
841
840
820
839
845
871
894
856
850
869
876
859
858
812
738
745
843
860
836
847
841
845
856
910
969
953
923
860
835
821
814
844
895
936
914
866
841
824
804
844
921
935
915
855
860
884
881
850
824
821
861
941
869
825
852
868
865
854
872
898
888
868
839
835
841
822
792
825
829
806
757
763
790
868
782
776
785
729
719
716
805
761
754
825
755
724
742
766
763
743
823
889
851
825
873
837
790
813
822
869
871
824
825
893
859
881
853
810
824
835
835
851
843
806
746
730
716
753
885
886
829
795
816
849
831
870
854
808
754
783
820
740
770
787
830
858
820
805
820
847
834
855
862
837
841
824
799
751
770
773
774
865
1019
1005
1028
993
939
900
897
873
829
836
875
884
916
937
892
829
812
825
801
824
1010
924
905
877
865
968
934
843
862
846
855
847
848
825
821
821
805
814
879
847
814
766
853
850
826
780
831
795
874
845
814
850
895
886
892
843
800
819
836
833
786
832
880
863
828
836
887
918
19 2 67 161 837 380.5 385.9 314.9 86
825
800
745
749
819
856
818
800
816
796
747
716
674
702
776
788
724
740
768
751
715
712
722
717
721
717
747
793
745
743
776
755
724
740
750
736
740
756
761
727
729
741
764
733
761
798
765
730
726
761
779
737
713
762
781
757
739
726
737
740
728
706
720
736
754
752
766
752
743
708
717
717
723
714
718
770
797
774
774
806
782
740
734
740
736
723
751
774
740
720
720
740
715
705
728
742
725
712
753
765
728
721
743
712
700
704
734
746
703
708
727
736
702
698
730
728
700
701
731
720
704
709
730
730
698
712
716
660
643
648
656
667
689
844
881
848
853
832
794
761
753
719
721
762
788
806
830
776
734
730
746
790
785
766
771
795
769
771
735
745
790
832
823
748
746
786
788
779
756
772
761
785
755
765
795
806
798
759
793
805
777
749
774
800
797
762
773
777
727
735
772
773
732
783
810
828
745
738
735
726
734
757
756
761
750
739
755
751
729
750
760
742
733
803
829
764
753
773
756
736
730
742
758
756
759
764
777
728
757
771
759
737
767
784
765
786
801
750
744
798
762
733
760
778
750
743
774
779
747
794
780
752
784
799
752
733
766
769
727
734
757
726
713
739
764
751
712
713
745
755
717
713
753
760
736
761
776
765
733
742
777
758
714
732
750
736
724
720
747
784
763
732
738
737
723
706
720
750
753
722
723
730
733
712
712
719
733
704
701
743
765
744
725
735
725
747
703
687
686
651
650
670
709
721
775
748
730
727
769
781
750
723
736
762
740
766
789
752
726
747
797
761
746
778
760
747
777
784
808
769
773
753
737
747
775
761
739
743
760
737
714
724
739
725
707
704
740
773
727
743
761
825
742
736
756
712
716
746
737
720
761
785
744
716
725
755
728
700
704
717
740
716
732
763
756
746
746
757
750
721
721
735
769
780
794
802
815
749
746
783
791
745
760
796
761
745
766
788
742
735
743
784
750
735
775
781
751
742
你好 James Carmichael,
我将长数据放在此面板中,看起来不太好。我很抱歉。以后我会注意的。
此外,我现在学习了numpy数组并理解了。
我的问题是,我的输出结果不像您提供的程序那样是0和1。如果我的输出变量是90、110、112、……,我想通过给出输出来训练我的模型。然后我想利用输出。您能建议哪种模型适合这种类型的程序吗?
这是一个二元分类器。如何为具有多个类的数据创建分类器?
显然,我可以使用one-hot编码来表示类,并创建任意数量的二元分类器,但有没有更好的替代方案?
嗨 J Jara……以下资源可能会让您感兴趣。
https://machinelearning.org.cn/multi-label-classification-with-deep-learning/
你好
我无法下载数据集,它有很多数字,但我没有理解如何下载它们。
嗨 El……请说明您为下载数据集做了什么,以便我们更好地帮助您。
以下链接可能有所帮助
https://www.kaggle.com/datasets/kumargh/pimaindiansdiabetescsv
嗨
我使用keras模型conv1d处理原始数据集 X_train= (142315, 23)
Y_train = (142315,)
我的代码
n_timesteps = X_train.shape[1] #23
input_layer = tensorflow.keras.layers.Input(shape=(n_timesteps,1))
conv_layer1 = tensorflow.keras.layers.Conv1D(filters=5,
kernel_size=7,
activation=”relu”)(input_layer)
max_pool1 = tensorflow.keras.layers.MaxPooling1D(pool_size=2, strides=5)(conv_layer1)
conv_layer2 = tensorflow.keras.layers.Conv1D(filters=3,
kernel_size=3,
activation=”relu”)(max_pool1)
flatten_layer = tensorflow.keras.layers.Flatten()(conv_layer2)
dense_layer = tensorflow.keras.layers.Dense(15, activation=”relu”)(flatten_layer)
output_layer = tensorflow.keras.layers.Dense(6, activation=”softmax”)(dense_layer)
model = tensorflow.keras.Model(inputs=input_layer, outputs=output_layer)
# Prints a string summary of the network.
model.summary()
然后我使用优化技术进行超参数优化,当# Returning the details of the best solution. 打印此错误时,可以帮助我吗?
错误
5121 # Use logits whenever they are available.
softmax
andsigmoid
ValueError: Shapes (142315,) and (142315, 2) are incompatible
嗨 sura……感谢提问。
我很想帮忙,但我实在没有能力为您调试代码。
我很乐意提出一些建议
考虑将代码积极削减到最低要求。这将帮助您隔离问题并专注于它。
考虑将问题简化为一个或几个简单的例子。
考虑寻找其他可行的类似代码示例,并慢慢修改它们以满足您的需求。这可能会暴露您的失误。
考虑在 StackOverflow 上发布您的问题和代码。
准确率:86%,如果我在数据集上运行预处理转换和缩放器,并使用完整数据集进行训练/预测。
准确率:训练时84%,测试时81%,使用训练:测试分割(只有在我对数据输入进行缩放后,准确率才能超过77%)。
伟大的文章,清晰简洁地解释了每一行代码,并且发现文章末尾的扩展提示非常有帮助,您链接到了每个扩展建议的教程指南。喜欢这个网站上采取的全面方法。
嗨 Jason,我能知道这是哪种类型的神经网络吗?是前馈、多层感知器还是其他?我觉得它可能是前馈。
这是多层感知器网络。但也是前馈网络,因为它总是朝前方向移动。有时,我们使用不同的名称来表示相同的事物。
在“加载数据”中,您应该从“numpy”导入“loadtxt”。
因为像我这样的初学者习惯于逐个运行每一段代码。
感谢您的反馈和建议 Abdullah!
感谢知识分享。
感谢您的反馈和支持 Deep Hazra!我们很感激。
嗨,Jason,
这是一个很棒的教程。我很欣赏您将其组合的方式。
您是否有关于如何将训练好的网络与优化算法相结合以使用该网络找到最大化输出值的输入参数的文章?
嗨 Sharon……以下课程可能会让您感兴趣。
https://machinelearning.org.cn/optimization-for-machine-learning-crash-course/
我阅读了Smith于1988年发表的题为“使用ADAP学习算法预测糖尿病发病率”的论文,其中“糖尿病谱系函数”被用作神经网络训练的一部分。您能否解释一下该函数在Keras深度学习模型训练中的关系?
嗨 Alex……这是一个很好的问题!以下资源可能会让您感兴趣。
https://www.analyticsvidhya.com/blog/2021/07/diabetes-prediction-with-pycaret/
嗨
我在从tensorflow.keras.model导入时遇到错误。
from tensorflow.keras.model import Sequential
给我的错误是‘No module named ”tensorflow.keras.model”’
我不得不更改导入为
来自 keras.models import Sequential
from keras.layers import Dense
但现在不确定我所做的是否等效,我应该注意的是我还没有完成教程。
我已经安装了tensorflow 2.15和keras 2.15。也许这是版本不匹配?我尝试过2.12,2.12,但遇到了同样的问题,不降级pip就无法回退。