Input error for LSTM neural network

Click For Summary
SUMMARY

The forum discussion centers on resolving a ValueError encountered while classifying DNA sequences using an LSTM neural network in TensorFlow. The error, "Shapes (None, 1, 3) and (None, 3) are incompatible," arises from mismatched shapes between the output of the model and the expected shape of the labels. The user successfully resolves the issue by utilizing the NumPy "reshape" function to align the dimensions of the arrays correctly.

PREREQUISITES
  • Understanding of LSTM neural networks and their architecture
  • Familiarity with TensorFlow 2.x and Keras API
  • Knowledge of One Hot Encoding for categorical data
  • Basic proficiency in Python programming and NumPy library
NEXT STEPS
  • Learn how to effectively use the NumPy "reshape" function for array manipulation
  • Explore TensorFlow model summary and debugging techniques for neural networks
  • Study the implications of input shapes in LSTM networks
  • Investigate advanced techniques for handling categorical data in machine learning
USEFUL FOR

Data scientists, machine learning practitioners, and anyone working with neural networks for sequence classification, particularly in bioinformatics.

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

Technology news 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.
 
  • 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!
 
  • Like
Likes   Reactions: Tom.G

Similar threads

  • · Replies 7 ·
Replies
7
Views
8K
  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
3
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 3 ·
Replies
3
Views
5K
  • · Replies 15 ·
Replies
15
Views
2K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K