这是我完整的代码。我正在尝试根据蛋白质序列预测蛋白质类别。
from sklearn.preprocessing import LabelBinarizer
# Transform labels to one-hot
lb = LabelBinarizer()
Y = lb.fit_transform(df.classification)
from keras.preprocessing import text, sequence
from keras.preprocessing.text import Tokenizer
from sklearn.model_selection import train_test_split
#maximum length of sequence, everything afterwards is discarded!
max_length = 500
#create and fit tokenizer
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(seqs)
X = tokenizer.texts_to_sequences(seqs)
X = sequence.pad_sequences(X, maxlen=max_length)
from __future__ import print_function
import numpy as np
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Dropout, Embedding, LSTM, Bidirectional, Conv1D
from keras.layers.convolutional import MaxPooling1D
import tensorflow as tf
from tensorflow.keras import layers
embedding_vecor_length = 128
max_length = 500
model = Sequential()
model.add(Embedding(len(tokenizer.word_index)+1, embedding_vecor_length, input_length=max_length))
model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Bidirectional(LSTM(64)))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=.2)
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=512)
这是模型的准确性 火车acc = 0.8485087800799034 test-acc = 0.8203392530062913
我的预测结果是:
[9.65313017e-02 1.33084046e-04 1.73516816e-03 4.62103529e-08
8.45071673e-03 2.42734270e-04 3.54182965e-04 2.88571493e-04
1.99087553e-05 8.92244339e-01]
[8.89207274e-02 1.99566261e-04 1.76228161e-04 2.08527595e-02
1.64435953e-01 2.83987029e-03 1.53038520e-02 7.07270563e-01
5.16798650e-07 2.19354401e-08]
[9.36142087e-01 6.09822795e-02 3.55492946e-09 2.19342492e-05
5.41335670e-04 1.89031591e-04 2.66434945e-04 1.84136129e-03
1.54582867e-05 3.31551647e-10]
在这方面的任何帮助将不胜感激。我坚持下去,不知道如何解决。另外,我是深度学习的新手。
答案 0 :(得分:0)
如您所见,最后一层具有softmax函数的激活功能
model.add(Dense(10, activation='softmax'))
因此,当您预测值时,它会通过最后一层的softmax函数,从而为您提供那些看起来很奇怪的浮点值。
现在,基本上,softmax函数在此处执行的操作是将给该函数的输入值归一化并在(0,1)范围内对其进行归一化,所有组件的总和为1。您可以阅读有关这里的softmax函数:https://en.wikipedia.org/wiki/Softmax_function。
关于如何找到预测标签ID,只需要在数组中找到最大值的索引,就可以得到它们所指向的标签ID。 您可以使用numpy argmax函数在多维数组中查找最大值索引。您可以在这里参考:https://numpy.org/doc/stable/reference/generated/numpy.argmax.html