我正在尝试为机器学习项目构建运行 Python 3.7 的 Ubuntu 18.04 Docker 映像。使用pip
from安装特定的 Python 包时requirements.txt
,出现以下错误:
Collecting sklearn==0.0\n Downloading sklearn-0.0.tar.gz (1.1 kB)\n Preparing metadata (setup.py): started\n Preparing metadata (setup.py): finished with status 'error'\n error: subprocess-exited-with-error\n \n \xc3\x97 python setup.py egg_info did not run successfully.\n \xe2\x94\x82 exit code: 1\n \xe2\x95\xb0\xe2\x94\x80> [1 lines of output]\n ERROR: Can not execute `setup.py` since setuptools is not available in the build environment.\n [end of output]\n
Run Code Online (Sandbox Code Playgroud)\n虽然这里的错误是在以下情况下出现的sklearn
,但该问题并不特定于某个库;当我删除该库并尝试重建映像时,其他库会出现错误。
这是我的Dockerfile
:
FROM ubuntu:18.04\n\n# …
Run Code Online (Sandbox Code Playgroud) 问题陈述
我在带有 tensorflow 后端(tf 版本 1.13.1)的 keras 中训练多对多 LSTM,用于标记文本序列,以使用预训练的 GloVe 嵌入来预测序列中每个元素的标记。我的训练方案涉及小批量随机梯度下降,每个小批量矩阵按列填充零以确保输入到网络的长度相等。
至关重要的是,由于任务和数据的性质对我的小批量进行自定义限制,我没有使用 keras 嵌入层。我的目标是为我的零填充单元实现屏蔽机制,以确保损失计算不会将这些单元虚假地视为真正的数据点。
方法
正如 keras文档中所解释的,keras 提供了三种设置掩蔽层的方法:
keras.layers.Embedding
图层配置mask_zero
为True
。keras.layers.Masking
图层;因为我没有使用嵌入层来编码我的训练数据,所以我无法使用带有掩码嵌入层的选项 (1)。因此,我选择了 (2) 并在初始化我的模型后立即添加了一个遮罩层。然而,这种变化似乎没有产生影响。事实上,不仅我的模型的准确性没有提高,在预测阶段模型仍然产生零预测。为什么我的屏蔽层不屏蔽零填充的单元格?这是否与在我的密集层中指定 3 个类而不是 2 个(因此将 0 作为单独的类包括在内)的事实有关?
现有资源的限制
已经提出并回答了类似的问题,但我无法使用它们来解决我的问题。虽然这篇文章没有得到直接回应,但评论中提到的一个链接帖子侧重于如何预处理数据以分配掩码值,这在这里没有争议。然而,掩蔽层初始化与此处使用的相同。这篇文章提到了同样的问题 - 遮罩层对性能没有影响 - 答案以与我相同的方式定义遮罩层,但再次侧重于将特定值转换为遮罩值。最后,这篇文章中的答案提供了相同的层初始化,而无需进一步详细说明。
玩具数据生成
为了重现我的问题,我生成了一个包含两个类 (1,2) 的玩具 10 批次数据集。批是一个可变长度的序列,后填充零,最大长度为 20 个嵌入,每个嵌入向量由 5 个单元组成,因此input_shape=(20,5)
. 这两个类的嵌入值是从不同但部分重叠的截断正态分布生成的,从而为网络创建了一个可学习但并非微不足道的问题。我在下面包含了玩具数据,以便您可以重现该问题。
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, …
Run Code Online (Sandbox Code Playgroud) keras
我使用&实现了带有条件随机场层 (BiLSTM-CRF) 的双向长短期记忆神经网络 (BiLSTM-CRF) keras_contrib
(后者用于实现 CRF,它不是本机的一部分keras functionality
。该任务被命名为实体识别分类为 6 种之一)网络的输入是一系列 300 维预训练的 GloVe 词嵌入。这是我的模型摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 648) 0
_________________________________________________________________
embedding_1 (Embedding) (None, 648, 300) 1500000
_________________________________________________________________
bidirectional_1 (Bidirection (None, 648, 10000) 3204000
_________________________________________________________________
crf_1 (CRF) (None, 648, 6) 6054
=================================================================
Run Code Online (Sandbox Code Playgroud)
现在我想在TensorFlow
1.15 中实现相同的模型。由于 keras_contrib CRF 模块仅适用于 keras 而不适用于 TensorFlow,因此我使用了此TensorFlow
存储库中为 1.X构建的 CRF 实现。该存储库包含两个很好的 CRF 示例实现(此处),但在使用我的数据进行训练时,每个示例都会产生不同的错误。
实施1
from tensorflow.keras.layers import Bidirectional, Embedding, LSTM, TimeDistributed …
Run Code Online (Sandbox Code Playgroud) 我对数据框进行了主成分分析,以减少线性回归分析中的预测变量数量。
pr.out = prcomp(df, scale=TRUE)
pr.var = pr.out$sdev^2
pve = pr.var/sum(pr.var)
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我想用解释最大比例方差的前几个主成分替换数据框中的旧变量。但是,在我的一生中,我无法找到每个主成分的观察向量(即每个数据点的 PC1 分数)。你知道我如何访问它们吗?pr.out$PC1
例如,我尝试过,但会返回NULL
.
我是Python和编程的新手(从12月开始),并尝试自学一些面向对象的Python并在我的lattest项目中得到这个错误:
AttributeError: type object 'Goblin' has no attribute 'color'
Run Code Online (Sandbox Code Playgroud)
我有一个文件来创建"Monster"类和一个从Monster类扩展的"Goblin"子类.当我导入两个类时,控制台不会返回任何错误
>>>from monster import Goblin
>>>
Run Code Online (Sandbox Code Playgroud)
即使创建实例也可以正常工作:
>>>Azog = Goblin
>>>
Run Code Online (Sandbox Code Playgroud)
但是当我调用我的Goblin类的属性时,控制台会在顶部返回错误,我不明白为什么.这是完整的代码:
import random
COLORS = ['yellow','red','blue','green']
class Monster:
min_hit_points = 1
max_hit_points = 1
min_experience = 1
max_experience = 1
weapon = 'sword'
sound = 'roar'
def __init__(self, **kwargs):
self.hit_points = random.randint(self.min_hitpoints, self.max_hit_points)
self.experience = random.randint(self.min_experience, self.max_experience)
self.color = random.choice(COLORS)
for key,value in kwargs.items():
setattr(self, key, value)
def battlecry(self):
return self.sound.upper()
class Goblin(Monster):
max_hit_points = 3
max_experience = 2
sound …
Run Code Online (Sandbox Code Playgroud) 我已经使用poetry
and创建了一个新环境python3.7
,并尝试安装项目中的第一个包:numpy
。
当我运行时,poetry add numpy
出现以下错误:
Using version ^1.22.4 for numpy\n\nUpdating dependencies\nResolving dependencies... (0.0s)\n\n SolverProblemError\n\n The current project's Python requirement (>=3.7,<4.0) is not compatible with some of the required packages Python requirement:\n - numpy requires Python >=3.8, so it will not be satisfied for Python >=3.7,<3.8\n \n Because no versions of numpy match >1.22.4,<2.0.0\n and numpy (1.22.4) requires Python >=3.8, numpy is forbidden.\n So, because base-env depends on numpy (^1.22.4), version solving …
Run Code Online (Sandbox Code Playgroud) python ×4
keras ×2
lstm ×2
crf ×1
docker ×1
mini-batch ×1
oop ×1
pca ×1
r ×1
setuptools ×1
tensorflow ×1