Я использую tf 1.15, я пытаюсь выполнить задачу регрессии, используя сигнал.
Прежде всего я загружаю свои сигналы в конвейер, у меня есть несколько файлов, здесь я моделирую загрузку используя np.zeros, чтобы сделать код пригодным для использования вами. Каждый файл имеет эту форму (?, 75000, 3), где? случайное число элементов, 75000 - количество выборок в каждом элементе, а 3 - количество сигналов.
Используя tf.data, я распаковываю их и получаю набор данных, который выводит сигналы с этой формой ( 75000,), и я использую их в моей модели keras.
Все должно быть хорошо, пока я не создаю модель keras, я скопировал свой входной конвейер, потому что во время моих тестов я получал различные ошибки, используя обобщенный c tf .data.dataset или используя набор данных, построенный таким образом.
import numpy as np
import tensorflow as tf
# called in the dataset pipeline
def my_func(x):
p = np.zeros([86, 75000, 3])
x = p[:,:,0]
y = p[:, :, 1]
z = p[:, :, 2]
return x, y, z
# called in the dataset pipeline
def load_sign(path):
func = tf.compat.v1.numpy_function(my_func, [path], [tf.float64, tf.float64, tf.float64])
return func
# Dataset pipeline
s = [1, 2] # here i have the file paths, i simulate it with numbers
AUTOTUNE = tf.data.experimental.AUTOTUNE
ds = tf.data.Dataset.from_tensor_slices(s)
# ds = ds.map(load_sign, num_parallel_calls=AUTOTUNE)
ds = ds.map(load_sign, num_parallel_calls=AUTOTUNE).unbatch()
itera = tf.data.make_one_shot_iterator(ds)
ABP, ECG, PLETH = itera.get_next()
# Until there everything should be fine
# Here i create my convolutional network
signal = tf.keras.layers.Input(shape=(None,75000), dtype='float32')
x = tf.compat.v1.keras.layers.Conv1D(64, (1), strides=1, padding='same')(signal)
x = tf.keras.layers.Dense(75000)(x)
model = tf.keras.Model(inputs=signal, outputs=x, name='resnet18')
# And finally i try to insert my signal into model
logits = model(PLETH)
Я получаю эту ошибку:
ValueError: Вход 0 слоя conv1d несовместим со слоем: его ранг не определен, но слой требует определенного ранга.
Почему? И как я могу сделать это работает? Также входной размер моего net должен быть таким согласно документации:
3D-тензор с формой: (batch_size, steps, input_dim)
Что такое шаги? В моем случае я предполагаю, что это должно быть (batch_size, 1, 75000), верно?