Я пытаюсь объединить две переменные тензорного потока, которые изначально были тензорными в моей программе, в один тензор, который будет использоваться в качестве входных меток в LSTM. У меня проблемы с этим из-за типа данных этих переменных. Можно ли объединить типы данных этого формата в тензорный поток, и если нет, есть ли способ обойти это?
Причина, по которой я использую этот подход, заключается в том, что я могу заменить текстовые категориальные данные, которые у меня есть для каждого файла (имена файлов), моими числовыми данными, разбивающими документ (который я обработал с использованием TF-IDF) .
Вот распечатка некоторых моих форматов данных, которые хранятся в python словаре (data_chart), который я использую для замены тензора y:
{'ACAM2000': (<tf.Tensor: shape=(36522,), dtype=float64, numpy=
array([2.96672401e-05, 1.16349841e-05, 7.28487958e-05, ...,
'Flublok': (<tf.Tensor: shape=(36522,), dtype=float64, numpy=
array([4.71040407e-05, 1.84733990e-05, 1.15665381e-04, ...,
nan, nan, nan])>, <tf.Tensor: shape=(), dtype=string, numpy=b'Flublok'>), 'Flucelvax': (<tf.Tensor: shape=(36522,), dtype=float64, numpy=
array([4.43845883e-05, 1.74068763e-05, 1.08987684e-04, ...,
Вот распечатка тензора у (сейчас у меня есть только два элемента, но я планирую добавить позже, имена элементов напрямую соотносятся с именами данных, хранящихся в словаре python выше):
tf.Tensor(
[[b'Gardasil']
[b'mmr']], shape=(2, 1), dtype=string)
Вот раздел кода, в котором я пытаюсь перебрать каждое имя файла и заменить его этими данными, преобразовав данные в переменные TF.
existing_data = None
for element in y:
variableA = tf.Variable(element, name="variableA")
for k in data_chart.keys():
while variableA == k:
point = data_chart.get(k)
existing_data = tf.concat([point, existing_data], 0)
print(point)
break
Этот раздел кода дает мне эта ошибка:
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-18-46e6c7720921> in <module>()
7 #print(variableA)
8 point = data_chart.get(k)
----> 9 existing_data = tf.concat([point, existing_data], 0)
10 print(point)
11 #tf.strings.join( [existing_data, point], separator='', name=None)
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/util/dispatch.py in wrapper(*args, **kwargs)
178 """Call target, and fall back on dispatchers if there is a TypeError."""
179 try:
--> 180 return target(*args, **kwargs)
181 except (TypeError, ValueError):
182 # Note: convert_to_eager_tensor currently raises a ValueError, not a
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py in concat(values, axis, name)
1596 dtype=dtypes.int32).get_shape().assert_has_rank(0)
1597 return identity(values[0], name=name)
-> 1598 return gen_array_ops.concat_v2(values=values, axis=axis, name=name)
1599
1600
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py in concat_v2(values, axis, name)
1175 try:
1176 return concat_v2_eager_fallback(
-> 1177 values, axis, name=name, ctx=_ctx)
1178 except _core._SymbolicException:
1179 pass # Add nodes to the TensorFlow graph.
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py in concat_v2_eager_fallback(values, axis, name, ctx)
1207 "'concat_v2' Op, not %r." % values)
1208 _attr_N = len(values)
-> 1209 _attr_T, values = _execute.args_to_matching_eager(list(values), ctx)
1210 _attr_Tidx, (axis,) = _execute.args_to_matching_eager([axis], ctx, _dtypes.int32)
1211 _inputs_flat = list(values) + [axis]
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/eager/execute.py in args_to_matching_eager(l, ctx, default_dtype)
261 ret.append(
262 ops.convert_to_tensor(
--> 263 t, dtype, preferred_dtype=default_dtype, ctx=ctx))
264 if dtype is None:
265 dtype = ret[-1].dtype
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in convert_to_tensor(value, dtype, name, as_ref, preferred_dtype, dtype_hint, ctx, accepted_result_types)
1339
1340 if ret is None:
-> 1341 ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
1342
1343 if ret is NotImplemented:
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py in _autopacking_conversion_function(v, dtype, name, as_ref)
1447 elif dtype != inferred_dtype:
1448 v = nest.map_structure(_cast_nested_seqs_to_dtype(dtype), v)
-> 1449 return _autopacking_helper(v, dtype, name or "packed")
1450
1451
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py in _autopacking_helper(list_or_tuple, dtype, name)
1353 # checking.
1354 if all(ops.is_dense_tensor_like(elem) for elem in list_or_tuple):
-> 1355 return gen_array_ops.pack(list_or_tuple, name=name)
1356 must_pack = False
1357 converted_elems = []
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py in pack(values, axis, name)
6335 pass # Add nodes to the TensorFlow graph.
6336 except _core._NotOkStatusException as e:
-> 6337 _ops.raise_from_not_ok_status(e, name)
6338 # Add nodes to the TensorFlow graph.
6339 if not isinstance(values, (list, tuple)):
/home/lily/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in raise_from_not_ok_status(e, name)
6624 message = e.message + (" name: " + name if name is not None else "")
6625 # pylint: disable=protected-access
-> 6626 six.raise_from(core._status_to_exception(e.code, message), None)
6627 # pylint: enable=protected-access
6628
/home/lily/.local/lib/python3.6/site-packages/six.py in raise_from(value, from_value)
InvalidArgumentError: cannot compute Pack as input #1(zero-based) was expected to be a double tensor but is a string tensor [Op:Pack] name: packed
Кто-нибудь знает, как я могу объединить свои данные в этом формате, или любые альтернативы, которые я должен попробовать. Заранее спасибо, и, пожалуйста, дайте мне знать, есть ли еще мой код, который было бы полезно посмотреть.