我的编码函数如下所示:
from transformers import BertTokenizer, BertModel
MODEL = 'bert-base-multilingual-uncased'
tokenizer = BertTokenizer.from_pretrained(MODEL)
def encode(texts, tokenizer=tokenizer, maxlen=10):
# import pdb; pdb.set_trace()
inputs = tokenizer.encode_plus(
texts,
return_tensors='tf',
return_attention_masks=True,
return_token_type_ids=True,
pad_to_max_length=True,
max_length=maxlen
)
return inputs['input_ids'], inputs["token_type_ids"], inputs["attention_mask"]
Run Code Online (Sandbox Code Playgroud)
我想通过这样做来动态编码我的数据:
x_train = (tf.data.Dataset.from_tensor_slices(df_train.comment_text.astype(str).values)
.map(encode))
Run Code Online (Sandbox Code Playgroud)
然而,这会消除错误:
ValueError: Input is not valid. Should be a string, a list/tuple of strings or a list/tuple of integers.
Run Code Online (Sandbox Code Playgroud)
现在根据我的理解,当我在其中设置断点时,encode是因为我发送了一个非 numpy 数组。如何让 Huggingface 变压器与张量流字符串作为输入配合良好?
如果您需要一个虚拟数据框,那么它是:
df_train = pd.DataFrame({'comment_text': ['Today was a good day']*5})
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用from_generator这样我就可以将字符串解析到函数中encode_plus。然而,这不适用于 …
我正在考虑为时间序列 LSTM 模型创建管道。我有两个输入提要,我们称它们为series1和series2。
我tf.data通过调用来初始化对象from.tensor.slices:
ds = tf.data.Dataset.from_tensor_slices((series1, series2))
Run Code Online (Sandbox Code Playgroud)
我将它们进一步批处理到设定窗口大小的窗口中,并在窗口之间移动 1:
ds = ds.window(window_size + 1, shift=1, drop_remainder=True)
Run Code Online (Sandbox Code Playgroud)
此时我想尝试一下它们是如何批处理在一起的。我想生成如下所示的特定输入作为示例:
series1 = [1, 2, 3, 4, 5]
series2 = [100, 200, 300, 400, 500]
batch 1: [1, 2, 100, 200]
batch 2: [2, 3, 200, 300]
batch 3: [3, 4, 300, 400]
Run Code Online (Sandbox Code Playgroud)
因此,每个批次将返回Series1的两个元素,然后返回Series2的两个元素。此代码片段无法单独批处理它们:
ds = ds.map(lambda s1, s2: (s1.batch(window_size + 1), s2.batch(window_size + 1))
Run Code Online (Sandbox Code Playgroud)
因为它返回数据集对象的两个映射。由于它们是对象,因此它们不可订阅,因此这也不起作用:
ds = ds.map(lambda s1, s2: (s1[:2], s2[:2])) …Run Code Online (Sandbox Code Playgroud) 我对机器学习和 Tensorflow 比较陌生,我想尝试在 MNIST 数据集上实现小批量梯度下降。但是,我不确定应该如何实施它。
(旁注:训练图像(28px x 28px)和标签存储在 Numpy 数组中)
目前,我可以看到两种不同的实现方式:
我的训练图像位于 [60000,28,28] 的 Numpy 数组中。将其重塑为 [25(批次数)、2400(批次中的图像数)、28,28],然后使用 for 循环调用每个批次并将其传递给 model.compile() 方法。我对这种方法唯一担心的是 for 循环本质上很慢,而矢量化实现会快得多。
将图像和标签组合成一个tensorflow数据集对象,然后调用Dataset.batch()方法和Dataset.prefetch()方法,然后将数据传递给model.compile()方法。唯一的问题是我的数据不会保留为 Numpy 数组,我认为它比张量流数据集对象具有更大的灵活性。
这两种方法中哪一种最适合实施,或者是否有我不知道的第三种最佳方法?
我有一组灰度 png 图像,分为 2 个目录。根据文档,我已使用 image_dataset_from_directory 将它们作为数据集对象加载。当我使用 element_spec 检查已加载的内容时,它说图像有 3 个通道:
from tensorflow.keras.preprocessing import image_dataset_from_directory
Dataset = image_dataset_from_directory('path/to/files')
Dataset.element_spec
Run Code Online (Sandbox Code Playgroud)
返回:
找到属于 2 个类别的 14000 个文件。
(TensorSpec(形状=(无, 256, 256, 3), dtype=tf.float32, 名称=无), TensorSpec(形状=(无,), dtype=tf.int32, 名称=无))
使用 MATLAB 将图像保存为灰度 png,并且我已使用 Linux 命令文件确认它们是灰度的:
$ file path/to/files/class_1/file_1.png
Run Code Online (Sandbox Code Playgroud)
path/to/files/class_1/file_1.png:PNG 图像数据,256 x 256,8 位灰度,逐行扫描
编辑:
有关使用识别的磁盘上文件的更多信息(来自 ImageMagick):
$ identify -verbose path/to/files/class_1/file_1.png
Run Code Online (Sandbox Code Playgroud)
Image: AI_Optrap/Samples/Set4/relaxed/HL60_normoxia_1_1.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: PseudoClass
Geometry: 256x256+0+0
Units: Undefined …Run Code Online (Sandbox Code Playgroud) 我正在尝试在深度学习项目中使用 CelebA 数据集。我有来自 Kaggle 的压缩文件夹。我想解压图像,然后将图像分为训练、测试和验证,但后来发现这在我不太强大的系统上是不可能的。
因此,为了避免浪费时间,我想使用 TensorFlow-datasets 方法来加载 CelebA 数据集。但不幸的是,数据集无法访问,并出现以下错误:
(代码先)
ds = tfds.load('celeb_a', split='train', download=True)
Run Code Online (Sandbox Code Playgroud)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-69-d7b9371eb674> in <module>
----> 1 ds = tfds.load('celeb_a', split='train', download=True)
c:\users\aman\appdata\local\programs\python\python38\lib\site-packages\tensorflow_datasets\core\load.py in load(name, split, data_dir, batch_size, shuffle_files, download, as_supervised, decoders, read_config, with_info, builder_kwargs, download_and_prepare_kwargs, as_dataset_kwargs, try_gcs)
344 if download:
345 download_and_prepare_kwargs = download_and_prepare_kwargs or {}
--> 346 dbuilder.download_and_prepare(**download_and_prepare_kwargs)
347
348 if as_dataset_kwargs is None:
c:\users\aman\appdata\local\programs\python\python38\lib\site-packages\tensorflow_datasets\core\dataset_builder.py in download_and_prepare(self, download_dir, download_config)
383 self.info.read_from_directory(self._data_dir)
384 else:
--> 385 …Run Code Online (Sandbox Code Playgroud) image python-3.x deep-learning tensorflow-datasets tensorflow2.0
我想生成 10 范围内的窗口:
import tensorflow as tf
dataset = tf.data.Dataset.from_tensor_slices(tf.range(10))
dataset = dataset.window(5, shift=1, drop_remainder=True)
Run Code Online (Sandbox Code Playgroud)
并想在这个数据集上训练我的模型。
为此,必须将这些窗口转换为张量。但这些窗口的数据类型无法转换tf.convert_to_tensor为张量。这是可以做到的tf.convert_to_tensor(list(window)),但是效率很低。
有谁知道如何tf.VariantDataset有效地将 a 转换为 a tf.Tensor?
感谢您的帮助!
我正在使用 colab pro TPU 实例来进行补丁图像分类。我正在使用张量流版本2.3.0。
调用 model.fit 时出现以下错误: InvalidArgumentError: Unable to find the relevant tensor remote_handle: Op ID: 14738, Output num: 0带有以下跟踪:
--------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-20-5fd2ec1ce2f9> in <module>()
15 steps_per_epoch=STEPS_PER_EPOCH,
16 validation_data=dev_ds,
---> 17 validation_steps=VALIDATION_STEPS
18 )
6 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
106 def _method_wrapper(self, *args, **kwargs):
107 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
--> 108 return method(self, *args, **kwargs)
109
110 # Running inside `run_distribute_coordinator` already.
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, …Run Code Online (Sandbox Code Playgroud) keras data-pipeline tensorflow-datasets google-colaboratory tpu
我正在使用 TF keras API 训练模型,我遇到的问题是我无法最大化 GPU 的使用,它在内存和处理方面都未得到充分利用。
在分析模型时,我可以看到许多标记为的操作,_Send我认为这些操作是在 GPU 和 CPU 之间跳跃的一些数据。
由于我使用的是 keras,因此我没有直接在设备上放置变量,因此我不清楚为什么会发生这种情况或如何优化。
另一个有趣的副作用似乎是,较大的批次会使训练速度变慢,GPU 需要等待很长时间才能从 CPU 获取数据。
分析器还建议:
59.4 % of the total step time sampled is spent on 'Kernel Launch'. It could be due to CPU contention with tf.data. In this case, you may try to set the environment variable TF_GPU_THREAD_MODE=gpu_private.
Run Code Online (Sandbox Code Playgroud)
我已在笔记本顶部设置了此环境变量,但没有效果 - 我不清楚如何检查它是否具有预期效果。
非常感谢您在这里的帮助,我已阅读张量流文档上的所有可用指南。
我是张量流新手。我想使用 TensorFlow Recommenders 库和以下位置提供的简单代码在我的数据集上训练推荐模型:
https://github.com/tensorflow/recommenders
我想知道如何使用(加载并提供给模型)以下格式的自定义 .csv 文件,而不是加载内置 Movielens 数据集?
| 用户身份 | 商品编号 | 评分 |
|---|---|---|
| 2 | 8 | 3 |
| 5 | 12 | 4 |
| 6 | 4 | 2 |
| ... | ... | ... |
我的张量流版本:
张量流==2.4.0
张量流数据集==4.2.0
张量流推荐==0.4.0
我正在开发这个项目,其中所有数据都经过预处理并准备好作为 TensorFlow 数据集,如下所示:
<MapDataset形状:{input_ids:(128,),input_mask:(128,),label_ids:(),segment_ids:(128,)},类型:{input_ids:tf.int64,input_mask:tf.int64,label_ids:tf .int64,segment_ids:tf.int64}>
我的脚本位于 PyTorch 中,并接受一个 Dataset 对象,如下所示:
Dataset({
features: [
'attention_mask',
'input_ids',
'label',
'sentence',
'token_type_ids'
],
num_rows: 12
})
Run Code Online (Sandbox Code Playgroud)
有什么办法可以将一种转换为另一种吗?我对这两个 API 都很陌生,所以不太清楚它们是如何工作的。我可以将其中一种转换为另一种吗?
tensorflow ×8
keras ×5
python ×5
dataset ×2
image ×1
numpy ×1
png ×1
python-3.x ×1
pytorch ×1
tensorboard ×1
tpu ×1