मैं यह समझने की कोशिश कर रहा हूं कि किसी वेक्टर से सुविधाओं को निकालने के लिए Conv1D परत का उपयोग कैसे करें। यहाँ मेरा कोड है:

import tensorflow as tf
from tensorflow.keras import models, layers
import numpy as np

# make 100 40000-dimensional vectors:
x = []
for i in range(100):
  array_of_random_floats = np.random.random_sample((40000))
  x.append(array_of_random_floats)
x = np.asarray(x)

# make 100 80000-dimensional vectors:
y = []
for i in range(100):
  array_of_random_floats = np.random.random_sample((80000))
  y.append(array_of_random_floats)
y = np.asarray(y)


model = models.Sequential([
  layers.Input((40000,)),
  layers.Conv1D(padding='same', kernel_initializer='Orthogonal', filters=16, kernel_size=16, activation=None, strides=2),
  # ...
  layers.Dense(80000)
])

model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])

history = model.fit(x=x,
                    y=y,
                    epochs=100)

यह निम्न त्रुटि उत्पन्न करता है:

ValueError: Input 0 of layer conv1d_20 is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: (None, 40000)

मैं थोड़ा भ्रमित हूं क्योंकि Conv1D परत के लिए प्रलेखन से लगता है कि यह वैक्टर को संसाधित कर सकता है ...

0
Eric 9 फरवरी 2021, 21:02

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि यह आपके आयामों में केवल एक त्रुटि है। मैंने पाया कि यदि आप अपनी Conv1D परत में इनपुट आकार निर्दिष्ट करते हैं और x के आयामों का विस्तार करते हैं तो यह काम करता है।

model = models.Sequential([
  layers.Conv1D(..., input_shape=(None, 40000)),
  # ...
  layers.Dense(80000)
])

तथा

history = model.fit(x=np.expand_dims(x, 1), y=y, epochs=100)
1
José Medeiros 9 फरवरी 2021, 22:22