Keras issue with layers compability

36 views Asked by At

Here is an exception:

2024-03-22 22:20:40.503162: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-03-22 22:20:41.005622: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-03-22 22:20:41.887025: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
Epoch 1/10
Traceback (most recent call last):
  File "D:\PythonProjects\QuarkMate\main.py", line 63, in <module>
    model, tokenizer = train_model(messages)
                       ^^^^^^^^^^^^^^^^^^^^^
  File "D:\PythonProjects\QuarkMate\main.py", line 58, in train_model
    _model.fit(padded_sequences, to_categorical(padded_sequences), epochs=10, verbose=1)
  File "D:\PythonProjects\QuarkMate\.venv\Lib\site-packages\keras\src\utils\traceback_utils.py", line 122, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "D:\PythonProjects\QuarkMate\.venv\Lib\site-packages\keras\src\backend\tensorflow\nn.py", line 546, in categorical_crossentropy
    raise ValueError(
ValueError: Arguments `target` and `output` must have the same rank (ndim). Received: target.shape=(None, 20, 48), output.shape=(None, 48)

in that code, have recently came to keras, don't know much enough

import csv
import json
import os
import threading

import numpy as np
import telebot
from keras import Sequential, Input
from keras.layers import Embedding, LSTM, Dense
from keras.preprocessing.sequence import pad_sequences
from keras.src.legacy.preprocessing.text import Tokenizer
from keras.utils import to_categorical

bot = telebot.TeleBot("censored hehehehaw")

# Parameters
max_sequence_length = 20
embedding_dim = 50
learning_interval = 3 * 60  # Learning interval in seconds (3 minutes)

dataset_file = 'dataset.json'


def load_dataset(file):
    _messages = []
    if os.path.exists(file):
        with open(file, 'r', encoding='utf-8') as json_file:
            _messages = json.load(json_file)
    return _messages


def save_dataset(_messages, file):
    with open(file, 'w', encoding='utf-8') as json_file:
        json.dump(_messages, json_file)


if not os.path.exists(dataset_file):
    open(dataset_file, 'a').close()

messages = load_dataset(dataset_file)


def train_model(_messages):
    _tokenizer = Tokenizer()
    _tokenizer.fit_on_texts(_messages)
    sequences = _tokenizer.texts_to_sequences(_messages)
    padded_sequences = pad_sequences(sequences, maxlen=max_sequence_length, padding='post')

    _model = Sequential([
        Input(shape=(max_sequence_length,)),
        Embedding(len(_tokenizer.word_index) + 1, embedding_dim),
        LSTM(128),
        Dense(len(_tokenizer.word_index) + 1, activation='sigmoid')
    ])

    _model.compile(loss='categorical_crossentropy', optimizer='adam',
                   metrics=['accuracy'])
    _model.fit(padded_sequences, to_categorical(padded_sequences), epochs=10, verbose=1)

    return _model, _tokenizer


model, tokenizer = train_model(messages)


def generate_response(message, _model, _tokenizer):
    sequence = _tokenizer.texts_to_sequences([message])
    padded_sequence = pad_sequences(sequence, maxlen=max_sequence_length, padding='post')
    predicted_sequence = _model.predict(padded_sequence)[0]
    predicted_word_index = np.argmax(predicted_sequence)
    predicted_word = list(_tokenizer.word_index.keys())[
        list(_tokenizer.word_index.values()).index(predicted_word_index)]
    return predicted_word


@bot.message_handler(func=lambda message: True)
def echo_all(message):
    global messages
    if message.text.startswith('/') or message.from_user.is_bot:
        return

    if hasattr(message, 'reply_to_message') and message.reply_to_message is not None:
        previous_message = message.reply_to_message.text
        messages.append(previous_message)
        messages.append(message.text)
        save_dataset(messages, dataset_file)

    response = generate_response(message.text, model, tokenizer)
    if response:
        bot.reply_to(message, response)


def periodic_ing.Timer(learning_interval, periodic_model_training).start()
    model, tokenizer = train_model(messages)


periodic_model_training()
model_training():
    global model, tokenizer, messages
    thread
bot.polling()

i've asked chatgpt and bingai. It's a bot for autolearning in telegram chat to answer out with defined theme, help me please

0

There are 0 answers