【发布时间】:2023-04-11 11:37:01
【问题描述】:
对于评估,我需要能够将卷积层应用于文本数据。所以我正在尝试对亚马逊评论进行情绪分析。但是,在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 层用于文本序列的正确方法是什么?
【问题讨论】:
标签: python tensorflow keras conv-neural-network