Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Tensorflow 2中的嵌入层之后放置Conv1D层?_Python_Tensorflow_Keras_Conv Neural Network - Fatal编程技术网

Python 如何在Tensorflow 2中的嵌入层之后放置Conv1D层?

Python 如何在Tensorflow 2中的嵌入层之后放置Conv1D层?,python,tensorflow,keras,conv-neural-network,Python,Tensorflow,Keras,Conv Neural Network,对于评估,我需要能够对文本数据应用卷积层。所以我尝试对亚马逊评论进行情绪分析。但是,嵌入层后,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

对于评估,我需要能够对文本数据应用卷积层。所以我尝试对亚马逊评论进行情绪分析。但是,
嵌入
层后,
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
层到文本序列的正确方法是什么?

单词嵌入层的外径应与Conv1D输入过滤器的大小相匹配。尝试将out_dim更改为32。正确的方法:

它是
conv(下一个(国际热核实验堆数据集))[0])
而不是
conv(下一个(国际热核实验堆数据集))[0])


网络结构正常

到目前为止,您做得很好。应该更改代码的最后一行。这就是全部。参数应为列车数据,而不是列车数据集

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])

希望您能纠正错误。

您好。这个解决方案已经被提出了,除非我遗漏了什么。