AttributeError: объект «Параметры» не имеет атрибута «Параметры».Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 AttributeError: объект «Параметры» не имеет атрибута «Параметры».

Сообщение Anonymous »

Я студент колледжа, изучаю федерацию с помощью Flower+pytorch, и я сделал ее демонстрационную версию.
Файлы сервера и клиентские файлы уже написаны и запускаются отдельно от консоли.
Сейчас возникла проблема, в сообщении об ошибке написано AttributeError: у объекта «Параметры» нет атрибута «параметры».
Мой код короткий, поэтому я все это пишу:

Код: Выделить всё

import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from model import MLP
import flwr as fl
from torch.utils.data import TensorDataset, DataLoader
import multiprocessing
import io
import torch

def preprocess_data(file_path):
data = pd.read_csv(file_path)

if data.isnull().sum().sum() >  0:
num_imputer = SimpleImputer(strategy='median')
data[data.columns] = num_imputer.fit_transform(data[data.columns])

scaler = StandardScaler()

data[data.columns[1:-1]] = scaler.fit_transform(data[data.columns[1:-1]])

X = data[data.columns[1:-1]].values
y = data['Class'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

X_train = torch.tensor(X_train, dtype=torch.float32)
y_train = torch.tensor(y_train, dtype=torch.long)
X_test = torch.tensor(X_test, dtype=torch.float32)
y_test = torch.tensor(y_test, dtype=torch.long)

return X_train, y_train, X_test, y_test

def train_model(model, trainloader, epochs):
"""Train the model on the training set."""
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for epoch in range(epochs):
for inputs, labels in trainloader:
outputs = model(inputs)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()

def test_model(model, testloader):
"""Validate the model on the test set."""
criterion = torch.nn.CrossEntropyLoss()
correct, total, loss = 0, 0, 0.0
with torch.no_grad():
for inputs, labels in testloader:
outputs = model(inputs)
loss += criterion(outputs, labels).item()
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = correct / total
return loss / len(testloader), accuracy

def load_data(file_path, batch_size=32):
"""Load and preprocess data from a file."""
# Preprocess the data
X_train, y_train, X_test, y_test = preprocess_data(file_path)

# Create TensorDatasets
train_data = TensorDataset(X_train, y_train)
test_data = TensorDataset(X_test, y_test)

# Create DataLoaders
trainloader = DataLoader(train_data, batch_size=batch_size, shuffle=True)
testloader = DataLoader(test_data, batch_size=batch_size)

return trainloader, testloader

def start_client(client_id, features):
# Load and preprocess data
trainloader, testloader = load_data('C:\\Users\\Fantasy\\Desktop\\毕设\\程序\\dataset\\creditcard_2023.csv')

# Create an MLP model instance, the size of the input layer is the number of features
model = MLP(len(features))

# Create a client instance
client = Client(trainloader, testloader, model)

fl.client.start_client(server_address="127.0.0.1:8080", client=client)

class Client(fl.client.NumPyClient):
def __init__(self, trainloader, testloader, model):
self.model = model
self.trainloader = trainloader
self.testloader = testloader

def get_parameters(self, config):
parameters = {name: io.BytesIO() for name, _ in self.model.named_parameters()}
for name, param in self.model.named_parameters():
torch.save(param.detach().cpu(), parameters[name])
return fl.common.Parameters(parameters, tensor_type="float32")

def set_parameters(self, parameters):
self.model.load_state_dict(parameters)

def fit(self, parameters, config):
self.set_parameters(parameters)
train_model(self.model, self.trainloader, epochs=1)
return self.get_parameters(config={}), len(self.trainloader.dataset), {}

def evaluate(self, parameters, config):
self.set_parameters(parameters)
loss, accuracy = test_model(self.model, self.testloader)
return loss, len(self.testloader.dataset), {"accuracy": accuracy}

def main():
# Define the features for each client
features_list = [['V1', 'V2', 'V3', 'V4'], ['V5', 'V6', 'V7', 'V8'], ['V9', 'V10', 'V11', 'V12']]

# Create a process for each client
processes = []
for i in range(3):   # Replace with the actual number of clients
features = features_list[i % len(features_list)]  # Assign features to clients in a round-robin fashion
process = multiprocessing.Process(target=start_client, args=(i, features))
processes.append(process)

# Start all processes
for process in processes:
process.start()

# Wait for all processes to finish
for process in processes:
process.join()

if __name__ == "__main__":
main()

Надеюсь, кто-нибудь поможет мне решить ее, ведь это прототип моей дипломной работы, поэтому я тороплюсь.
Ошибка сообщение следующее:

Код: Выделить всё

Process Process-1:
Traceback (most recent call last):
File "C:\Users\Fantasy\AppData\Local\Programs\Python\Python310\lib\multiprocessing\process.py", line 314, in _bootstrap
self.run()
File "C:\Users\Fantasy\AppData\Local\Programs\Python\Python310\lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Fantasy\Desktop\毕设\程序\code\main.py", line 100, in start_client
fl.client.start_client(server_address="127.0.0.1:8080", client=client)
File "C:\Users\Fantasy\Desktop\毕设\程序\code\venv\lib\site-packages\flwr\client\app.py", line 248, in start_client
_start_client_internal(
File "C:\Users\Fantasy\Desktop\毕设\程序\code\venv\lib\site-packages\flwr\client\app.py", line 382, in _start_client_internal
out_message = app(message=message, context=context)
File "C:\Users\Fantasy\Desktop\毕设\程序\code\venv\lib\site-packages\flwr\client\flower.py", line 76, in __call__
return self._call(message, context)
File "C:\Users\Fantasy\Desktop\毕设\程序\code\venv\lib\site-packages\flwr\client\flower.py", line 66, in ffn
out_message = handle_legacy_message_from_tasktype(
File "C:\Users\Fantasy\Desktop\毕设\程序\code\venv\lib\site-packages\flwr\client\message_handler\message_handler.py", line 130, in handle_legacy_message_from_tasktype
out_recordset = getparametersres_to_recordset(
File "C:\Users\Fantasy\Desktop\毕设\程序\code\venv\lib\site-packages\flwr\common\recordset_compat.py", line 342, in getparametersres_to_recordset
getparametersres.parameters, keep_input=keep_input
AttributeError: 'Parameters' object has no attribute 'parameters'
Я не знаю, в чем проблема, поэтому не могу ее исправить. Впервые задаю вопрос о переполнении стека.

Подробнее здесь: https://stackoverflow.com/questions/782 ... parameters
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Dipy — ошибка атрибута: AttributeError: модуль «numpy» не имеет атрибута «float»
    Anonymous » » в форуме Python
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Dipy — ошибка атрибута: AttributeError: модуль «numpy» не имеет атрибута «float»
    Anonymous » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Python Mediapipe AttributeError: объект «NoneType» не имеет атрибута «pose_landmarks»
    Гость » » в форуме Python
    0 Ответы
    137 Просмотры
    Последнее сообщение Гость
  • Проблема с атрибутом флажка Tkinter. AttributeError: объект IntVar не имеет атрибута select.
    Anonymous » » в форуме Python
    0 Ответы
    100 Просмотры
    Последнее сообщение Anonymous
  • AttributeError: объект DataFrame не имеет атрибута group_by.
    Anonymous » » в форуме Python
    0 Ответы
    108 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»