OSError 无法创建文件 - 无效参数

Posted

技术标签:

【中文标题】OSError 无法创建文件 - 无效参数【英文标题】:OSError unable to create file - invalid argument 【发布时间】:2018-02-18 20:10:45 【问题描述】:

我在 Tensorflow 上使用 Python 和 Keras 来训练我的神经网络。 当我从 Ubuntu 16.04 切换到 Windows 10 时,当我运行以下命令时,我的模型无法再保存:

filepath = "checkpoint-"+str(f)+model_type+"-"+optimizer_name+"-epoch:02d-loss:.3f.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, save_best_only=True, mode='min')
callbacks_list = [checkpoint]

及以后:

model.fit(X, y,
      batch_size=128,
      epochs=1,
      shuffle=False,
      callbacks=callbacks_list)

我收到此错误:

OSError: 无法创建文件(无法打开文件:name = 'checkpoint-<_io.textiowrapper name="data/swing-projects100-raw/many-chunks/log-gamma-f3.txt" mode=" a" encoding="cp1252">2l128-adam-0.001-epoch:02d-loss:.3f.h5', errno = 22, 错误信息 = 'invalid argument', flags = 13, o_flags = 302)

我通过 conda 安装了 Keras 2.0.8 和 h5py 2.7.0。

我试过了

filepath = "checkpoint-"+str(f)+model_type+"-"+optimizer_name+"-epoch:02d-loss:.3f.hdf5"

with open(filepath, "w") as f:
  f.write("Test.")

得到了类似的错误:

OSError: [Errno 22] 无效参数:“检查点-<_io.textiowrapper name="data/swing-projects100-raw/many-chunks/log-gamma-f3.txt" mode="a" encoding=" cp1252">2L128-Adam-0.001-epoch:02d-loss:.3f.hdf5"

【问题讨论】:

我建议尝试使用该文件路径保存任何简单的文本文件:f=open(filepath,'w') @maz 请看看我编辑的问题。 ***.com/questions/25584124/… 建议 filepath 是一个无效的文件名。如果您需要帮助确定如何将 filepath 设置为有效的文件名,请在问题中添加导致错误的 filepath 的值。 @SethDifley 您可以在第一条和第二条错误消息之前的问题中看到filepath 的值。我的路径是相对路径,我不知道它有什么问题。 @AIpeter 你不想在那个字符串上调用.format 来输入一些值吗?大括号和冒号等...是常见 linux 文件系统的有效字符,因此您会得到一个名称中包含“epoch:02d”的文件 - 在 Windows 上 - 这些不是文件名的有效字符.. 【参考方案1】:

当我从文件路径中删除 str(f) 时,它起作用了。 f 是一个整数,我不知道它为什么会导致错误,但是从字符串中删除它解决了我的问题。

如果你知道具体原因,请告诉我。

【讨论】:

简单,f不是整数,而是textiowrapper。 @MatiasValdenegro 你的意思是str(f) 是一个textiowrapper 吗?因为str() 或者为什么f=0 应该是一个textiowrapper?【参考方案2】:

这段代码我也有类似的问题:

agent.save("./saved_models/weights_episode_.h5".format(e))

我通过手动创建文件夹saved_models解决了这个问题

e 是一个整数在我的情况下不会导致任何问题。

【讨论】:

【参考方案3】:

我在远程机器上使用 tensorflow 时遇到了类似的问题。

我的原因可能是“无权修改文件”。

我通过使用“../model.h5”之类的保存路径——你有权限的文件夹来解决这个问题。

这可能对某人有所帮助。

【讨论】:

以上是关于OSError 无法创建文件 - 无效参数的主要内容,如果未能解决你的问题,请参考以下文章

“OSError:[WinError 10022] 提供了无效参数”尝试发送 TCP SYN 数据包(python)

我应该为不存在的文件参数引发 ValueError 或 OSError 吗?

Python创建文件报错OSError:[Errno 22] Invalid argument处理

尝试下载 GSuite 的导出。收到“OSError:目录名称无效。”当它点击名为“

OpenXmlSDK 无法读取手动创建的 xlsx 文件:'指定的包无效。主要部分不见了。

OSError:无法打开文件(无法打开文件)