Input error for LSTM neural network

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 2K views
BRN
Messages
107
Reaction score
10
Hi everyone,

I have to classify a DNA sequence with a LSTM neural network but I have a problem with the inputs shame. Both the sequence and the class are encoded with One Hot Encoding and my code is this:

[CODE lang="python" title="python code"]
import pandas as pd
import numpy as np

data = pd.read_csv('splice.data', header = None)

data_shuffled = data.sample(frac = 1).reset_index(drop = True)

# space removing
for i in range (len(data)):
data.loc[2] = data.loc[2].strip()

raw_data = np.array(data)

def one_hot_encoder(data):
x = []
y = []

for i in range (len(data)):
oh_class = np.zeros((1, 3))
if data[0] == 'EI': oh_class[0][0] = 1
elif data[0] == 'IE': oh_class[0][1] = 1
else: oh_class[0][2] = 1

y.append(oh_class)

oh_seq = np.zeros((len(data[0][2]), 4))
for j in range (len(data[0][2])):
if data[2][j] == 'A': oh_seq[j][0] = 1
elif data[2][j] == 'C': oh_seq[j][1] = 1
elif data[2][j] == 'G': oh_seq[j][2] = 1
else: oh_seq[j][3] = 1

x.append(oh_seq)

return np.array(x), np.array(y)

x_seq, y_class = one_hot_encoder(raw_data)

# Split into validation and training data
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_seq, y_class, test_size = 0.2, random_state = 1)

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, LSTM, Dropout

#Initialize the RNN

model = Sequential()
model.add(LSTM(units = 50, activation = 'relu', return_sequences = True, input_shape = (x_train.shape[1], x_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units = 60, activation = 'relu', return_sequences = True))
model.add(Dropout(0.3))
model.add(LSTM(units = 80, activation = 'relu', return_sequences = True))
model.add(Dropout(0.4))
model.add(LSTM(units = 120, activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(units = 3, activation='softmax'))
model.summary()

model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
model.fit(x_train, y_train, epochs = 100, batch_size = 80, validation_split = 0.1)
[/CODE]

The error I receive is this

[CODE lang="python" title="python error"]
ValueError: Shapes (None, 1, 3) and (None, 3) are incompatible
[/CODE]

Can anyone tell me how to solve?

Thanks!
 

Attachments

on Phys.org
Somewhere you are trying to equate or merge (or somehow deal with) two arrays of different shapes. Which line is giving the error you pasted? Please include the whole error message.
 
Reply
  • Like
Likes   Reactions: BRN
I'm sorry if I answer only now.

I resolved the issue and yes, and I had two arrays with different shapes. Now, I discover "reshape" function in numpy.

I'm a newbie with Python ...

Anyway, thanks for your concern!
 
Reply
  • Like
Likes   Reactions: Tom.G