![](/img/trans.png)
[英]Using tensorflow Conv1D: how can I solve error "Input 0 of layer "conv1d_9" is incompatible with the layer: "?
[英]How do I put a Conv1D layer after an Embedding layer in Tensorflow 2?
對於評估,我需要能夠將卷積層應用於文本數據。 所以我正在嘗試對亞馬遜評論進行情緒分析。 然而,在Embedding
層之后, Conv1D
層將無法獲得所需的形狀。
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
print(f'Tensorflow version {tf.__version__}')
from tensorflow import keras
from tensorflow.keras.layers import Dense, Conv1D, GlobalAveragePooling1D, Embedding
import tensorflow_datasets as tfds
from tensorflow.keras.models import Model
(train_data, test_data), info = tfds.load('imdb_reviews/subwords8k',
split=[tfds.Split.TRAIN, tfds.Split.TEST],
as_supervised=True, with_info=True)
padded_shapes = ([None], ())
train_dataset = train_data.shuffle(25000).padded_batch(padded_shapes=padded_shapes, batch_size=16)
test_dataset = test_data.shuffle(25000).padded_batch(padded_shapes=padded_shapes, batch_size=16)
n_words = info.features['text'].encoder.vocab_size
class ConvModel(Model):
def __init__(self):
super(ConvModel, self).__init__()
self.embe = Embedding(n_words, output_dim=16)
self.conv = Conv1D(32, kernel_size=6, activation='elu')
self.glob = GlobalAveragePooling1D()
self.dens = Dense(2)
def call(self, x, training=None, mask=None):
x = self.embe(x)
x = self.conv(x)
x = self.glob(x)
x = self.dens(x)
return x
conv = ConvModel()
conv(next(iter(train_data))[0])
ValueError: 層 conv1d_25 的輸入 0 與層不兼容:預期 ndim=3,發現 ndim=2。 收到的完整形狀:[163, 16]
怎么可能實現這一點,如果我錯了,將Conv1D
層用於文本序列的正確方法是什么?
它是conv(next(iter(train_dataset))[0])
而不是conv(next(iter(train_data))[0])
網絡結構沒問題
到目前為止,你做得很好。 應更改代碼的最后一行。 就這樣。 參數應該是 train_data 而不是 train_dataset。
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
print(f'Tensorflow version {tf.__version__}')
from tensorflow import keras
from tensorflow.keras.layers import Dense, Conv1D, GlobalAveragePooling1D, Embedding
import tensorflow_datasets as tfds
from tensorflow.keras.models import Model
(train_data, test_data), info = tfds.load('imdb_reviews/subwords8k',
split=[tfds.Split.TRAIN, tfds.Split.TEST],
as_supervised=True, with_info=True)
padded_shapes = ([None], ())
train_dataset = train_data.shuffle(25000).padded_batch(padded_shapes=padded_shapes, batch_size=16)
test_dataset = test_data.shuffle(25000).padded_batch(padded_shapes=padded_shapes, batch_size=16)
n_words = info.features['text'].encoder.vocab_size
class ConvModel(Model):
def __init__(self):
super(ConvModel, self).__init__()
self.embe = Embedding(n_words, output_dim=16)
self.conv = Conv1D(32, kernel_size=6, activation='elu')
self.glob = GlobalAveragePooling1D()
self.dens = Dense(2)
def call(self, x, training=None, mask=None):
x = self.embe(x)
x = self.conv(x)
x = self.glob(x)
x = self.dens(x)
return x
conv = ConvModel()
conv(next(iter(train_data))[0])
希望你修復錯誤。
詞嵌入層的 out_dim 應與 conv1D 輸入過濾器大小匹配。 嘗試將 out_dim 更改為 32。正確方法: https://machinelearningmastery.com/predict-sentiment-movie-reviews-using-deep-learning/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.