tensorflow 如何修复错误'UnicodeDecodeError:“charmap”编解码器无法解码位置36188中的字节0x9d:字符Map到< undefined>'

gtlvzcf8  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(172)

我正在训练一个AI使用TensorFlow 1.14和Python 2.6.7写一本书。每当我运行我的训练Python代码时,我都会收到错误消息UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 36188: character maps to <undefined>,我已经重新安装了TensorFlow和Python,并搜索了论坛试图找到答案。回溯将我引导到encodings文件夹中名为www.example.com的文件cp1252.py
我运行的代码是

  1. import numpy as np
  2. import tensorflow as tf
  3. import argparse
  4. import time
  5. import os
  6. from six.moves import cPickle
  7. from utils import TextLoader
  8. from model import Model
  9. def main():
  10. parser = argparse.ArgumentParser()
  11. parser.add_argument('--data_dir', type=str, default='data/tinyshakespeare',
  12. help='data directory containing input.txt')
  13. parser.add_argument('--input_encoding', type=str, default=None,
  14. help='character encoding of input.txt, from https://docs.python.org/3/library/codecs.html#standard-encodings')
  15. parser.add_argument('--log_dir', type=str, default='logs',
  16. help='directory containing tensorboard logs')
  17. parser.add_argument('--save_dir', type=str, default='save',
  18. help='directory to store checkpointed models')
  19. parser.add_argument('--rnn_size', type=int, default=256,
  20. help='size of RNN hidden state')
  21. parser.add_argument('--num_layers', type=int, default=2,
  22. help='number of layers in the RNN')
  23. parser.add_argument('--model', type=str, default='lstm',
  24. help='rnn, gru, or lstm')
  25. parser.add_argument('--batch_size', type=int, default=50,
  26. help='minibatch size')
  27. parser.add_argument('--seq_length', type=int, default=25,
  28. help='RNN sequence length')
  29. parser.add_argument('--num_epochs', type=int, default=50,
  30. help='number of epochs')
  31. parser.add_argument('--save_every', type=int, default=1000,
  32. help='save frequency')
  33. parser.add_argument('--grad_clip', type=float, default=5.,
  34. help='clip gradients at this value')
  35. parser.add_argument('--learning_rate', type=float, default=0.002,
  36. help='learning rate')
  37. parser.add_argument('--decay_rate', type=float, default=0.97,
  38. help='decay rate for rmsprop')
  39. parser.add_argument('--gpu_mem', type=float, default=0.666,
  40. help='%% of gpu memory to be allocated to this process. Default is 66.6%%')
  41. parser.add_argument('--init_from', type=str, default=None,
  42. help="""continue training from saved model at this path. Path must contain files saved by previous training process:
  43. 'config.pkl' : configuration;
  44. 'words_vocab.pkl' : vocabulary definitions;
  45. 'checkpoint' : paths to model file(s) (created by tf).
  46. Note: this file contains absolute paths, be careful when moving files around;
  47. 'model.ckpt-*' : file(s) with model definition (created by tf)
  48. """)
  49. args = parser.parse_args()
  50. train(args)
  51. def train(args):
  52. data_loader = TextLoader(args.data_dir, args.batch_size, args.seq_length, args.input_encoding)
  53. args.vocab_size = data_loader.vocab_size
  54. # check compatibility if training is continued from previously saved model
  55. if args.init_from is not None:
  56. # check if all necessary files exist
  57. assert os.path.isdir(args.init_from)," %s must be a path" % args.init_from
  58. assert os.path.isfile(os.path.join(args.init_from,"config.pkl")),"config.pkl file does not exist in path %s"%args.init_from
  59. assert os.path.isfile(os.path.join(args.init_from,"words_vocab.pkl")),"words_vocab.pkl.pkl file does not exist in path %s" % args.init_from
  60. ckpt = tf.train.get_checkpoint_state(args.init_from)
  61. assert ckpt,"No checkpoint found"
  62. assert ckpt.model_checkpoint_path,"No model path found in checkpoint"
  63. # open old config and check if models are compatible
  64. with open(os.path.join(args.init_from, 'config.pkl'), 'rb') as f:
  65. saved_model_args = cPickle.load(f)
  66. need_be_same=["model","rnn_size","num_layers","seq_length"]
  67. for checkme in need_be_same:
  68. assert vars(saved_model_args)[checkme]==vars(args)[checkme],"Command line argument and saved model disagree on '%s' "%checkme
  69. # open saved vocab/dict and check if vocabs/dicts are compatible
  70. with open(os.path.join(args.init_from, 'words_vocab.pkl'), 'rb') as f:
  71. saved_words, saved_vocab = cPickle.load(f)
  72. assert saved_words==data_loader.words, "Data and loaded model disagree on word set!"
  73. assert saved_vocab==data_loader.vocab, "Data and loaded model disagree on dictionary mappings!"
  74. with open(os.path.join(args.save_dir, 'config.pkl'), 'wb') as f:
  75. cPickle.dump(args, f)
  76. with open(os.path.join(args.save_dir, 'words_vocab.pkl'), 'wb') as f:
  77. cPickle.dump((data_loader.words, data_loader.vocab), f)
  78. model = Model(args)
  79. merged = tf.summary.merge_all()
  80. train_writer = tf.summary.FileWriter(args.log_dir)
  81. gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=args.gpu_mem)
  82. with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) as sess:
  83. train_writer.add_graph(sess.graph)
  84. tf.global_variables_initializer().run()
  85. saver = tf.train.Saver(tf.global_variables())
  86. # restore model
  87. if args.init_from is not None:
  88. saver.restore(sess, ckpt.model_checkpoint_path)
  89. for e in range(model.epoch_pointer.eval(), args.num_epochs):
  90. sess.run(tf.assign(model.lr, args.learning_rate * (args.decay_rate ** e)))
  91. data_loader.reset_batch_pointer()
  92. state = sess.run(model.initial_state)
  93. speed = 0
  94. if args.init_from is None:
  95. assign_op = model.epoch_pointer.assign(e)
  96. sess.run(assign_op)
  97. if args.init_from is not None:
  98. data_loader.pointer = model.batch_pointer.eval()
  99. args.init_from = None
  100. for b in range(data_loader.pointer, data_loader.num_batches):
  101. start = time.time()
  102. x, y = data_loader.next_batch()
  103. feed = {model.input_data: x, model.targets: y, model.initial_state: state,
  104. model.batch_time: speed}
  105. summary, train_loss, state, _, _ = sess.run([merged, model.cost, model.final_state,
  106. model.train_op, model.inc_batch_pointer_op], feed)
  107. train_writer.add_summary(summary, e * data_loader.num_batches + b)
  108. speed = time.time() - start
  109. if (e * data_loader.num_batches + b) % args.batch_size == 0:
  110. print("{}/{} (epoch {}), train_loss = {:.3f}, time/batch = {:.3f}" \
  111. .format(e * data_loader.num_batches + b,
  112. args.num_epochs * data_loader.num_batches,
  113. e, train_loss, speed))
  114. if (e * data_loader.num_batches + b) % args.save_every == 0 \
  115. or (e==args.num_epochs-1 and b == data_loader.num_batches-1): # save for the last result
  116. checkpoint_path = os.path.join(args.save_dir, 'model.ckpt')
  117. saver.save(sess, checkpoint_path, global_step = e * data_loader.num_batches + b)
  118. print("model saved to {}".format(checkpoint_path))
  119. train_writer.close()
  120. if __name__ == '__main__':
  121. main()

任何帮助将不胜感激,我可以给予任何信息需要编辑:我的Traceback

  1. File "train.py", line 134, in <module>
  2. main()
  3. File "train.py", line 54, in main
  4. train(args)
  5. File "train.py", line 57, in train
  6. data_loader = TextLoader(args.data_dir, args.batch_size, args.seq_length, args.input_encoding)
  7. File "C:\Users\Josh\Desktop\word-rnn-tensorflow-master\utils.py", line 23, in __init__
  8. self.preprocess(input_file, vocab_file, tensor_file, encoding)
  9. File "C:\Users\Josh\Desktop\word-rnn-tensorflow-master\utils.py", line 66, in preprocess
  10. data = f.read()
  11. File "C:\Users\Josh\anaconda3\envs\tensorenviron\lib\encodings\cp1252.py", line 23, in decode
  12. return codecs.charmap_decode(input,self.errors,decoding_table)[0]
  13. UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 36188: character maps to <undefined>```
pkwftd7m

pkwftd7m1#

垃圾进垃圾出请检查输入(文件)中的特殊字符。
我在“contents = file.read()”上得到了这个错误,因为输入文本中有“heart”。
下面是输入文本:“我是一名iOS和Web开发人员。“️咖啡和摩托车。

bqujaahr

bqujaahr2#

原来文本文件里有个奇怪的字符。我只需要把所有奇怪的符号换成正确的符号。感谢所有他的帮助!

相关问题