Пытаюсь следовать за AWS Учебник DeepAR ML
Извините за мое незнание, когда дело доходит до JSON, но я понимаю это, поскольку предпочтительнее передавать строки, а не числа с плавающей запятой. Я пытался сделать это здесь и использовал UTF-8, так как это должен быть байтовый тип.
def write_dicts_to_file(path, data):
with open(path, 'wb') as fp:
for d in data:
fp.write(json.dumps(d).encode("utf-8"))
fp.write("\n".encode('utf-8'))
Передав их в указанную выше функцию:
%%time
write_dicts_to_file("train.json", training_data)
write_dicts_to_file("test.json", test_data)
Мои цели затем записываются в виде строк, что я и ожидал, но позже я перейду к коду AWS, чтобы здесь:
%%time
data_channels = {
"train": "{}/train/".format(data_location),
"test": "{}/test/".format(data_location)
}
estimator.fit(inputs=data_channels, wait=True)
Что возвращает ошибку invalid float X, поскольку мои цели по-прежнему являются строками. Как передать только цели в файле JSON как числа с плавающей запятой, а не строки?
Не знаком с лучшими практиками JSON, поэтому я читал о других вопросах по этой теме. Есть ли способ записать файл JSON, заставляя строки перемещаться?
JSON - это текст. Таким образом, при сериализации json все типы преобразуются в строки, и этого нельзя избежать. Когда я читаю ваш вопрос, мне непонятно, какую проблему вы здесь пытаетесь решить. Бывают случаи, когда вы можете захотеть использовать какое-нибудь настраиваемое строковое представление действительных чисел. Реализация по умолчанию предоставит вам что-то вроде ~ 50 бит точности. Вероятно, будут ошибки округления, но для реальных данных ошибки округления обычно несущественны.






Как вы думаете, почему предпочтительнее передавать строки вместо чисел с плавающей запятой? Поплавки (и любое другое представление действительных чисел) имеют конечную точность. Конечно, это касается и струнных. Например, невозможно точно представить
1/3в десятичной строке.