#python #tensorflow
#python #tensorflow
Вопрос:
Я пытаюсь создать нейронную сеть, которая принимает данные в виде матрицы и выводит вектор, но я не знаю, какие слои использовать для этого. Мой ввод имеет форму (10,4), а желаемый результат имеет форму (3,). Моя текущая модель следующая :
model = tf.keras.Sequential([
tf.keras.layers.Dense(256,activation="relu"),
tf.keras.layers.Dense(256,activation="relu"),
tf.keras.layers.Dense(1),
])
это, по крайней мере, приводит к получению вектора вместо матрицы, но имеет (10,) вместо (3,) . Вероятно, я мог бы найти способ уменьшить это значение до (3,), но я сомневаюсь, что при таком подходе я поступаю правильно.
Комментарии:
1. Пожалуйста, предоставьте достаточно воспроизводимый ввод и ожидаемый результат. Кроме того,
(10,)
(3,)
информация и, которую вы предоставляете в конце, не соответствует коду, которым вы поделились. Пожалуйста, будьте предельно ясны и точны.2. Что такое (10,4), это последовательность? или изображение? или просто матрица (10,4)
3. это всего лишь матрица (10,4). желаемый результат — это вектор длины 3, который я обозначил с помощью (3,) . надеюсь, это правильно. фактический текущий вывод — это вектор длины 10, который я обозначил с помощью (10,)
4. тогда решение, о котором я упоминаю ниже, должно сработать для вас. не стесняйтесь соответствующим образом изменять архитектуру.
Ответ №1:
Предполагая, что ваша (10,4)
матрица не представляет последовательность длиной 10 (где вам понадобится LSTM
) ИЛИ изображение (где вам понадобится 2D CNN
), вы можете просто flatten()
ввести матрицу и передать ее в следующие несколько плотных слоев, как показано ниже.
from tensorflow.keras import layers, Model
inp = layers.Input((10,4)) #none,10,4
x = layers.Flatten()(inp) #none,40
x = layers.Dense(256)(x) #none,256
out = layers.Dense(3)(x) #none,3
model = Model(inp, out)
model.summary()
Layer (type) Output Shape Param #
=================================================================
input_43 (InputLayer) [(None, 10, 4)] 0
_________________________________________________________________
flatten_1 (Flatten) (None, 40) 0
_________________________________________________________________
dense_82 (Dense) (None, 256) 10496
_________________________________________________________________
dense_83 (Dense) (None, 3) 771
=================================================================
Total params: 11,267
Trainable params: 11,267
Non-trainable params: 0
Комментарии:
1.Я пробовал это, но по какой-то причине у меня это не работает.
data.shape
Тензорная форма ([10, 4])x = tf.keras.layers.Flatten()(data)
x = tf.keras.layers.Dense(256)(x)
x = tf.keras.layers.Dense(3)(x)
x.shape
Тензорная форма ([10, 4])2. это действительно работает, мой плохой. По-видимому, слой Flatten() ничего не делает с матрицей, потому что он ожидает, что первое измерение будет размером пакета. Если я использую model.fit (data), он внутренне добавит размер пакета в качестве измерения (я думаю) и будет работать так, как вы описали.
Ответ №2:
Вы можете использовать слой Flatten: https://keras.io/api/layers/reshaping_layers/flatten /
Или вы можете попробовать 2d CNNS.