Ошибка тензорного типа при федеративном обучении

Я попытался использовать инструмент федеративного обучения tensorflow для своих данных. У меня есть два набора данных (набор данных и набор данных2), полученные из файлов csv, где первые 15 столбцов - это функции, а последний столбец - метка. Я преобразовал свой фрейм данных pandas в набор данных tensorflow. Однако на итераторе возникает ошибка странного типа. Я новичок в tensrflow и отправляю код: любая помощь будет принята с благодарностью. Заранее спасибо.

from __future__ import absolute_import, division, print_function
from sklearn.preprocessing import MinMaxScaler
from keras.models import Model

import collections
import numpy as np
import tensorflow as tf
import tensorflow_federated as tff
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
import pandas as pd


X_train= pd.read_csv('./daily_frames_HR.csv')



values = X_train.values

values = values.astype('float32')
# normalize features
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
# frame as supervised learning

train = values[:, :]
# split into input and outputs
X, y = train[:, :-2], train[:, -1]


def create_compiled_keras_model():
  model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(
      12, activation=tf.nn.softmax, kernel_initializer='zeros', input_dim=15)])

  return model

def model_fn():
  keras_model = create_compiled_keras_model()

  keras_model.compile(loss='binary_crossentropy', optimizer='sgd', metrics= 
   ['SparseCategoricalAccuracy'])
  X_train = pd.read_csv('./daily_frames_HR.csv')

  values = X_train.values

  values = values.astype('float32')
  # normalize features
  scaler = MinMaxScaler(feature_range=(0, 1))
  scaled = scaler.fit_transform(values)
  # frame as supervised learning

  train = values[:, :]
  # split into input and outputs
  X, y = train[:, :-2], train[:, -1]

  sample_batch = collections.OrderedDict([('x', X), ('y', y)])
  return tff.learning.from_compiled_keras_model(keras_model, sample_batch)


  iterative_process = tff.learning.build_federated_averaging_process(model_fn)

  state = iterative_process.initialize()

  X2_train= pd.read_csv('./lab_frames_HR.csv')
  values2 = X2_train.values

  values2 = values2.astype('float32')
  # normalize features
  scaler = MinMaxScaler(feature_range=(0, 1))
  scaled = scaler.fit_transform(values2)
  # frame as supervised learning

  train2 = values2[:, :]
  # split into input and outputs
  X2, y2 = train2[:, :-2], train2[:, -1]

  X2=pd.DataFrame(X2)
  y2=pd.DataFrame(y2)

  X=pd.DataFrame(X)
  y=pd.DataFrame(y)


dataset = tf.data.Dataset.from_tensor_slices((X2.values, y2.values))

dataset2= tf.data.Dataset.from_tensor_slices((X.values, y.values))


list = [dataset, dataset2]

state, metrics = iterative_process.next(state, list)
print('round  1, metrics={}'.format(metrics))

Сообщения об ошибках следующие:

Отслеживание (последний вызов последним): файл "/home/affectech/Desktop/Fed_son/Fed_son.py", строка 117, в состоянии, metrics = iterative_process.next (состояние, список) Файл "/ home /ffectech / Desktop / Fed_son /venv/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/utils/function_utils.py ", строка 666, в call arg = pack_args (self._type_signature.parameter, args, kwargs, context) Файл "/home/affectech/Desktop/Fed_son/venv/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/utils/function_utils.py", строка 424, в контексте pack_args ) Файл "/home/affectech/Desktop/Fed_son/venv/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/utils/function_utils.py", строка 346, в pack_args_into_anonymous_tuple result_elements (name.append ( , context.ingest (arg_value, elem_type))) Файл "/home/affectech/Desktop/Fed_son/venv/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/reference_executor.py", строка 629, в приеме возврата т o_presentation_for_type (arg, type_spec, _handle_callable) Файл "/home/affectech/Desktop/Fed_son/venv/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/reference_executor.py", строка 241 для представления_информации_executor.py ", строка 241 v в значении File "/home/affectech/Desktop/Fed_son/venv/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/reference_executor.py", строка 241, in for v в значении File "/ home /ffectech / Desktop / Fed_son / venv / lib / python3.6 / site-packages / tensorflow_federated / python / core / impl / reference_executor.py ", строка 200, в to_presentation_for_type для v в значении File" / home /ffectech / Desktop /Fed_son/venv/lib/python3.6/site-packages/tensorflow_federated/python/core/impl/reference_executor.py ", строка 200, вместо v в значении File" / home /ffectech / Desktop / Fed_son / venv / lib /python3.6/site-packages/tensorflow_federated/python/core/impl/reference_executor.py ", строка 192, в файле to_presentation_for_type callable_handler)" / home /ffec tech / Desktop / Fed_son / venv / lib / python3.6 / site-packages / tensorflow_federated / python / core / impl / reference_executor.py ", строка 165, в to_presentation_for_type 'спецификация типа {}.'. format (inferred_type_spec, type_spec )) TypeError: Тензорный тип float32 [15] представления значения не соответствует спецификации типа float32 [?, 15].

Процесс завершен с кодом выхода 1


person sersem1    schedule 21.10.2019    source источник


Ответы (2)


Похоже, что вызов iterative_process.next(state, list) ожидает, что список наборов данных (list) будет списком пакетных наборов данных. Размер пакета может быть даже 1, если вы предпочитаете не иметь несколько примеров в пакете.

batch_size = 1
list = [dataset.batch(batch_size), dataset2.batch(batch_size)]

Печать типов различных объектов возможна с print(iterative_process.next.type_signature) и _6 _ (dataset).

person Zachary Garrett    schedule 22.10.2019

Я вижу одну проблему:

X, y = train[:, :-2], train[:, -1]

Вы теряете здесь свой последний столбец с характеристиками, скорее всего, он должен быть

X, y = train[:, :-1], train[:, -1]

Этот сценарий сбивает с толку переопределение train, X и y в теле функции. Эта программа никогда не должна доходить до сообщения об ошибке, потому что X2 не определяется временем его использования. Я бы рекомендовал не использовать повторно имена переменных, как правило, это упростит вам отладку программы.

Затем, когда вы получите жалобу на форму чего-либо, распечатайте ее (или ее часть) до того, как произойдет ошибка, это поможет диагностировать, что не так.

person hlidka    schedule 21.10.2019
comment
Спасибо за Ваш ответ. Однако для функции iterative_process.next я не знаю ожидаемую форму. Также, когда я проверяю переменные, ничего нет с формой float32 [?, 15]. Как вы думаете, это могло случиться? - person sersem1; 21.10.2019