如何使用具有 3D 张量输入的 keras 嵌入层?

我在使用 Keras 嵌入层和输入数据的一种热编码时遇到困难。


以下是玩具代码。


导入包


from keras.models import Sequential

from keras.layers import Dense

from keras.layers import Flatten

from keras.layers.embeddings import Embedding

from keras.optimizers import Adam

import matplotlib.pyplot as plt

import numpy as np

import openpyxl

import pandas as pd

from keras.callbacks import ModelCheckpoint

from keras.callbacks import ReduceLROnPlateau

输入数据是基于文本的,如下所示。


训练和测试数据


X_train_orignal= np.array(['OC(=O)C1=C(Cl)C=CC=C1Cl', 'OC(=O)C1=C(Cl)C=C(Cl)C=C1Cl',

       'OC(=O)C1=CC=CC(=C1Cl)Cl', 'OC(=O)C1=CC(=CC=C1Cl)Cl',

       'OC1=C(C=C(C=C1)[N+]([O-])=O)[N+]([O-])=O'])


X_test_orignal=np.array(['OC(=O)C1=CC=C(Cl)C=C1Cl', 'CCOC(N)=O',

       'OC1=C(Cl)C(=C(Cl)C=C1Cl)Cl'])


Y_train=np.array(([[2.33],

       [2.59],

       [2.59],

       [2.54],

       [4.06]]))


Y_test=np.array([[2.20],

   [2.81],

   [2.00]])

创建字典


现在我创建了两个字典,用于索引副的字符。唯一的字符号存储在len(charset),字符串的最大长度以及 5 个附加字符存储在embed. 每个字符串的开头将被填充,!结尾将是E.


charset = set("".join(list(X_train_orignal))+"!E")

char_to_int = dict((c,i) for i,c in enumerate(charset))

int_to_char = dict((i,c) for i,c in enumerate(charset))

embed = max([len(smile) for smile in X_train_orignal]) + 5

print (str(charset))

print(len(charset), embed)

一热编码


我将所有火车数据转换为一种热编码,如下所示。


def vectorize(smiles):

        one_hot =  np.zeros((smiles.shape[0], embed , len(charset)),dtype=np.int8)

        for i,smile in enumerate(smiles):

            #encode the startchar

            one_hot[i,0,char_to_int["!"]] = 1

            #encode the rest of the chars

            for j,c in enumerate(smile):

                one_hot[i,j+1,char_to_int[c]] = 1

            #Encode endchar

            one_hot[i,len(smile)+1:,char_to_int["E"]] = 1


        return one_hot[:,0:-1,:]


X_train = vectorize(X_train_orignal)

print(X_train.shape)

X_test = vectorize(X_test_orignal)

print(X_test.shape)

当它将输入的训练数据转换为一种热编码时,一种热编码数据的形状变为(5, 44, 14)训练和(3, 44, 14)测试。对于火车,有 5 个示例,0-44 是最大长度,14 是唯一字符。字符数较少的示例被填充E到最大长度。

慕丝7291255
浏览 113回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python