如何在Python Tensorflow-Keras中pickleweakref?

2024-06-27

我写了一个语音识别python,我使用了tensorflow keras模型。

当我在运行 200 Epoch 后向模型提供输入时,出现异常,我尝试解决但它不起作用。

我收到此错误无法腌制弱引用对象。

异常跟踪

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Conda\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "G:\code\speaker_identification.py", line 93, in record
    pickle.dump([regressor] ,mf)
TypeError: can't pickle weakref objects

这是我尝试过的完整代码

from tkinter import *
from tkinter import filedialog
from keras.layers import *
from keras.models import Sequential
import sounddevice as sd
import pickle
import scipy.io.wavfile as wav
import numpy as np
import speechpy
import os
import time

window=Tk()
window.title('Project')
fs=44100
duration=5
i=[]
def features(fs,signal):
    #fs, signal = wav.read(file_name)
    #signal = signal[:,0]
    
    signal_preemphasized = speechpy.processing.preemphasis(signal, cof=0.98)
    
    frames = speechpy.processing.stack_frames(signal, sampling_frequency=fs, frame_length=0.020, frame_stride=0.01, filter=lambda x: np.ones((x,)), zero_padding=True)
    
    power_spectrum = speechpy.processing.power_spectrum(frames, fft_points=512)
    
    mfcc = speechpy.feature.mfcc(signal, sampling_frequency=fs, frame_length=0.020, frame_stride=0.01, num_filters=40, fft_length=512, low_frequency=0, high_frequency=None)
    mfcc_cmvn = speechpy.processing.cmvnw(mfcc,win_size=301,variance_normalization=True)
    
    mfcc_feature_cube = speechpy.feature.extract_derivative_feature(mfcc)
    
    logenergy = speechpy.feature.lmfe(signal, sampling_frequency=fs, frame_length=0.020, frame_stride=0.01, num_filters=40, fft_length=512, low_frequency=0, high_frequency=None)
    logenergy_feature_cube = speechpy.feature.extract_derivative_feature(logenergy)
    
    return [fs, signal, frames, power_spectrum, mfcc, mfcc_cmvn, mfcc_feature_cube, logenergy, logenergy_feature_cube]

def getSample():
    try:
        with open('names.pickle','rb') as f:
            names=pickle.load(f)
    except:
        names=[]
    n=t1.get('1.0','end-1c')
    if ((n in names) or n==''):
        t10.delete('1.0','end-1c')
        t10.insert(END,'Username Already used')
    else:
        names.append(n)
        with open('names.pickle','wb') as f:
                pickle.dump(names,f)
        train=Tk()
        train.title('Add Sample')
        tl1=Label(train,text='Press The button to record 5 Second sample')
        tl1.grid(row=0,column=0)
        def record():
            global duration,fs
            rec=sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16')
            sd.wait()
            sd.play(rec,fs)
            sd.wait()
            rec=list(map(float,rec))
            try:
                with open('mat.pickle','rb') as tf:
                    k, feature=pickle.load(tf)
            except:
                k=0
                feature=np.array([])
            k+=1
            s=features(fs,np.array(rec))
            ss=s[-1]
            ss=ss.reshape((498,40,3))
            feature=list(feature)
            feature.append(ss)
            feature=np.array(feature)
            with open('mat.pickle','wb') as tf:
                pickle.dump([k,feature],tf)
            regressor=Sequential()
            regressor.add(Conv2D(32,kernel_size=3,activation='relu',input_shape=(498,40,3)))
            regressor.add(MaxPooling2D(pool_size=(4,4)))
            regressor.add(Conv2D(64,kernel_size=3,activation='relu'))
            regressor.add(MaxPooling2D(pool_size=(4,4)))
            regressor.add(Dense(10))
            regressor.add(Dropout(rate=0.5))
            regressor.add(Dense(5))
            regressor.add(Flatten())
            regressor.add(Dense(k,activation='sigmoid'))
            regressor.compile(optimizer='rmsprop',loss='mean_squared_error')
            ytrain=np.zeros((k,k),int)
            np.fill_diagonal(ytrain,1)
            regressor.fit(x=feature,y=ytrain,batch_size=32,epochs=200)
            with open('model.pickle','wb') as mf:
                pickle.dump([regressor] ,mf)
            t10.delete('1.0','end-1c')
            t10.insert(END,'Username Added and Model Trained')
            train.destroy()
            
        tb1=Button(train,text='Record',command=record)
        tb1.grid(row=1,column=0, padx=10,pady=10)
        train.mainloop()
   
def recognize():
    recog=Tk()
    recog.title('Recognize the voice')
    try:
        with open('names.pickle','rb') as f:
            names=pickle.load(f)
    except:
        t10.delete('1.0','end-1c')
        t10.insert(END,'No Samples in Dataset')
        recog.destroy()
        
    def recordrecog():
        r=sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16')
        sd.wait() 
        sd.play(r,fs)
        sd.wait()
        r=list(map(float,r))
        s=features(fs,np.array(r))
        ss=s[-1]
        ss=ss.reshape((1,498,40,3))
        with open('model.pickle','rb') as mf:
            regressor=pickle.load(mf)
        regressor=regressor[0]
        predictionval=regressor.predict(ss)
        t10.delete('1.0','end-1c')
        global i
        i=list(list(predictionval)[0])
        n=names[i.index(max(i))]
        t10.insert(END,n)
    
    rl1=Label(recog,text='Record a 5 Sec sample by clicking the following button')
    rl1.grid(row=0,column=0)
    rb1=Button(recog,text='Record Sample',command=recordrecog)
    rb1.grid(row=1,column=0,padx=10,pady=10)
    
    recog.mainloop()

def deleteAll():
    os.remove('names.pickle')
    os.remove('mat.pickle')
    os.remove('model.pickle')
    t10.delete('1.0','end-1c')
    t10.insert(END,'All Files and Users Deleted')

l1=Label(window,text='Name')
l1.grid(row=0,column=0)
b1=Button(window,text='ADD',command=getSample)
b1.grid(row=1,column=1)
t1=Text(window, height=2, width=35, selectbackground='blue')
t1.grid(row=1,column=0, padx=10,pady=10)

b2=Button(window,text='Recognize the User',command=recognize)
b2.grid(row=2,column=0, padx=10,pady=30)


l10=Label(window,text='Status')
l10.grid(row=9,column=0)
t10=Text(window,height=1, width=50)
t10.grid(row=10,column=0,padx=10,pady=10)
b10=Button(window,text='Delete all Data',command=deleteAll)
b10.grid(row=10,column=1,padx=10,pady=10)
#l1=Label(window,text='Training')
#l1.grid(row=0,column=0)

window.mainloop()

当我使用 joblib 时出现新错误或几乎相同

Epoch 200/200
1/1 [==============================] - 0s 15ms/step - loss: 0.0000e+00
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Conda\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "G:\code\speaker_identification.py", line 89, in record
    joblib.dump([regressor], 'model.pkl')
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 480, in dump
    NumpyPickler(f, protocol=protocol).dump(value)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 437, in dump
    self.save(obj)
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 282, in save
    return Pickler.save(self, obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 504, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Conda\Anaconda3\lib\pickle.py", line 816, in save_list
    self._batch_appends(obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 843, in _batch_appends
    save(tmp[0])
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 282, in save
    return Pickler.save(self, obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 549, in save
    self.save_reduce(obj=obj, *rv)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 662, in save_reduce
    save(state)
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 282, in save
    return Pickler.save(self, obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 504, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Conda\Anaconda3\lib\pickle.py", line 856, in save_dict
    self._batch_setitems(obj.items())
  File "C:\Conda\Anaconda3\lib\pickle.py", line 882, in _batch_setitems
    save(v)
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 282, in save
    return Pickler.save(self, obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 549, in save
    self.save_reduce(obj=obj, *rv)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 662, in save_reduce
    save(state)
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 282, in save
    return Pickler.save(self, obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 504, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Conda\Anaconda3\lib\pickle.py", line 856, in save_dict
    self._batch_setitems(obj.items())
  File "C:\Conda\Anaconda3\lib\pickle.py", line 882, in _batch_setitems
    save(v)
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 282, in save
    return Pickler.save(self, obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 504, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Conda\Anaconda3\lib\pickle.py", line 856, in save_dict
    self._batch_setitems(obj.items())
  File "C:\Conda\Anaconda3\lib\pickle.py", line 881, in _batch_setitems
    save(k)
  File "C:\Conda\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line 282, in save
    return Pickler.save(self, obj)
  File "C:\Conda\Anaconda3\lib\pickle.py", line 524, in save
    rv = reduce(self.proto)
TypeError: can't pickle weakref objects

我在保存 Keras 模型和所有这些提到的方法时遇到了同样的问题,例如pickle, joblib甚至model.save('filename')没用。 最后,我通过直接拨打电话解决了这个问题save_model方法如下:

import tensorflow as tf
tf.keras.models.save_model(model, filename)

如果您已经训练了带有子类的tensorflow-keras 模型,那么它可能会特别以这种方式工作。希望对其他人有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python Tensorflow-Keras中pickleweakref? 的相关文章

  • 使用 setuptools (pip) 时如何打印警告和错误

    我正在使用 setuptools 来打包代码 以便可以使用以下命令轻松安装它 cd project name pip install 在设置过程中 我想警告用户有关预先存在的配置文件的信息 并在系统上打印一些安装后说明 例如 etc pro
  • 获取父类名? [复制]

    这个问题在这里已经有答案了 class A object def get class self return self class class B A def init self A init self b B print b get cl
  • 使用 cx_oracle 返回 MERGE 中受影响的行数

    如何在 CX Oracle 中执行 MERGE INTO sql 命令来获取受影响的行数 当我在cx oracle 上执行MERGE SQL 时 我得到的cursor rowcount 为 1 有没有办法获取受合并影响的行数 由于 cx o
  • 使用 Python 访问内存映射文件

    我希望利用激战 2 中的内存映射文件 该文件旨在链接到 Mumble 以获得位置音频 该文件包含有关字符坐标的信息和其他有用的信息 我已经能够使用此脚本访问坐标信息 import mmap import struct last while
  • 如何在 dash/plotly 中使用 iframe? (Python/HTML)

    我正在创建一个仪表板 我想使用这个交互式地图 网站链接 https www ons gov uk peoplepopulationandcommunity healthandsocialcare causesofdeath articles
  • 为什么 scikit-learn SVM.SVC() 非常慢?

    我尝试使用SVM分类器来训练大约10万个样本的数据 但我发现它非常慢 甚至两个小时后也没有任何反应 当数据集有大约 1k 个样本时 我可以立即得到结果 我还尝试了 SGDClassifier 和朴素贝叶斯 速度相当快 几分钟内就得到了结果
  • 使用 pytherejs 嵌入小部件:错误的视角和相机观察

    我在用pythreejs可视化一些 3D 模型 在 Jupyter 笔记本上可视化模型时 一切都按预期进行 但是当尝试将小部件嵌入 HTML 文档时 我面临两个问题 看起来相机在加载时正在查看 0 0 0 而不是预期的那样 一旦您与小部件交
  • Python Jinja2 调用宏会导致(不需要的)换行符

    我的 JINJA2 模板如下所示 macro print if john name if name John Hi John endif endmacro Hello World print if john Foo print if joh
  • [Python]比较两个 zip 文件的函数,一个位于 FTP 目录中,另一个位于我的本地计算机上

    我在创建比较两个 zip 文件的函数时遇到问题 如果它们相同 而不仅仅是名称相同 这是我的代码示例 def validate zip files self host 192 168 0 1 port 2323 username 123 pa
  • python 函数中的对象不可迭代错误

    我有一个简单的功能如下 comdList range 0 27 for t in comdList print t 但是它返回一个 in object not iterable 错误 在函数之外它工作正常 这是怎么回事 尝试这个 for t
  • 识别文本中的多个类别和相关情感

    如果您有一个文本语料库 如何识别所有类别 来自预定义类别列表 以及与之相关的情绪 正面 负面写作 我将在 Python 中执行此操作 但现阶段我不一定要寻找特定于语言的解决方案 让我们用一个例子来看看这个问题 试图澄清我的问题 如果我有一整
  • 构建wheel失败/“错误:INCLUDE环境变量为空”

    我正在使用 Python 2 7 11 并尝试 pip install 模块 但是其中一些模块失败了 我收到的消息是 无法为 X 构建轮子 和 错误 包含环境变量为空 我尝试安装 Scrapy LXML 和 Twisted 但都失败了 我尝
  • Python httplib 和 POST

    我目前正在使用别人编写的一段代码 它用httplib向服务器发出请求 它以正确的格式提供所有数据 例如消息正文 标头值等 问题是 每次尝试发送 POST 请求时 数据都在那里 我可以在客户端看到它 但没有任何内容到达服务器 我已经阅读了库规
  • 训练某些网络时,Keras(Tensorflow 后端)在 GPU 上比在 CPU 上慢

    我很难理解为什么 GPU 和 CPU 速度在小规模网络中相似 CPU 有时更快 而 GPU 在大规模网络中更快 问题底部的代码在 i7 6700k 上运行时间为 103 7 秒 但使用tensorflow gpu 时 代码运行时间为 29
  • 如何隐藏 Tkinter python Gui

    有人知道如何隐藏 python GUI Tkinter 我已经创建了键盘记录器 对于 GUI 我使用了 python 模块 Tkinter 我想添加名为 HIDE 的按钮 因此当用户单击它时 它将隐藏 GUI 当用户按下 CTRL E 之类
  • matplotlib 后端 - 我关心吗?

    gt gt gt import matplotlib gt gt gt print matplotlib rcsetup all backends u GTK u GTKAgg u GTKCairo u MacOSX u Qt4Agg u
  • tkinter 库 treectrl 转换为 exe 安装程序时出现 cx_freeze 错误

    我使用的是 python 版本 3 7 我使用了这个名为 treectrl 的外部库 当我运行 py 文件时它工作得很好 但是当我使用 cx freeze 转换为 exe 文件时 它给了我错误 NomodulleFound 名为 tkint
  • pandas groupby 中两个系列的最大值和最小值

    是否可以从 groupby 中的两个系列中获取最小值和最大值 例如下面的情况 分组时c 我怎样才能得到最小值和最大值a and b同时 df pd DataFrame a 10 20 3 40 55 b 5 14 8 50 60 c x x
  • 如何限制单元测试的最大运行时间?

    我目前正在运行一些单元测试 这些测试可能需要很长时间才能失败或无限期地运行 在成功的测试运行中 它们总是会在一定的时间内完成 是否可以创建一个 pytest 单元测试 如果在一定时间内未完成 该测试就会失败 您可以安装 pytest tim
  • 定义Python类时,如何在其中设置随机变量?

    假设我有一个名为Person 其中只有该人的姓名和性别 性别应从男性和女性中随机选择 为此 我导入random randint 功能 根据随机int确定随机性别 import random class Person alias random

随机推荐

  • 像win32 SDK编程一样创建android应用程序

    我是android编程的新手 我想创建一个应用程序 我已经为windows提供的词汇增强器 单词提醒 它会在一定的时间间隔弹出来提醒我之前保存的单词 我认为 Android 编程就像使用 Visual Studio 6 或最新版本的 Win
  • 是否可以?相机 API ios [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在应用程序中实现一项功能 当用户
  • 从 Google/Facebook 帐户重新验证用户身份

    因此 我需要创建一个 REST API 来为 IOS 应用程序提供功能 我们允许用户仅使用普通帐户或使用脸书 谷歌登录 我最近一直在阅读 OAuth 我想我了解在我的情况下如何使用 OAuth 的过程 当用户使用脸书 谷歌登录 在我的应用程
  • C语言中如何检查未初始化的指针

    我的计算机科学教授给我们布置了这个作业 基本上我们有这两个未初始化的全局指针 min ptr max ptr 我们正在写这个void spray paint char x int sz char tok char t 函数获取 tok 的值
  • jquery 对于每个具有相似 id 的元素

    我在页面上有很多元素 ID1 ID2 ID3 我想操纵所有元素 有没有更简单的方法来做到这一点 ID each function 您可以使用 选择器 Example div id ID 选择 DOMID属性开头为ID 即 ID1 IDID
  • 在 Alamofire 中快速发送 GET 请求中的 json 对象

    我正在尝试执行一个绑定了 json 对象的 GET 请求 这就是我生成 JSON 对象的方式 let jsonObject String AnyObject ean code type match value 16743799 然后我执行了
  • 为什么没有调用回调?

    我有来自的示例脚本B OP检查 https metacpan org pod B OPCheck SYNOPSIS模块经过修改PL op name to padsv https github com Perl perl5 blob blea
  • 如何在 RxJS 中“等待”两个可观察值

    在我的应用程序中我有类似的东西 this personService getName id concat this documentService getDocument subscribe response gt console log
  • 将 jQuery 数组字符串转换为 PHP 数组

    首先 我得说我对 PHP 还很陌生 我正在尝试获取一个可以使用 foreach 的 PHP 对象 以下字符串通过 ajax 传递 我正在尝试转动以下字符串 menu title TEST1 href title TEST2 href QWE
  • 如何通过键查找最大和最小日期

    我有一个数组 a array 2010 05 03 gt 100 2010 05 04 gt 400 2008 05 01 gt 800 2011 01 01 gt 800 我如何找到最大值和最小值key date 例如 max gt 20
  • 如何将 Filesystem 类的 glob 方法与 StorageFacade 结合使用?

    这涉及到拉拉维尔 5 我可以看到Illuminate Filesystem Filesystem一个方法叫做glob pattern flags 0 不幸的是 这个方法并没有体现在默认的情况下FilesystemAdapter随 Larav
  • Thymeleaf 表更新无需重新加载页面

    我正在使用 thymeleaf 属性渲染数据 但我现在正在实现 搜索 按钮 并且希望在不重新加载的情况下执行此操作 我有属性depatments哪个渲染List
  • 在 OpenGL 中写入深度缓冲区而不进行深度测试(非着色器)

    在OpenGL中 是否可以绘制一系列不检查深度的多边形 因此 考虑到它们的z位置 它们将始终绘制在之前绘制的其他多边形的前面 但与此同时 他们仍然写入深度缓冲区 我想这可以使用着色器来实现 但现在我无法访问它 严格来说不是 从man pag
  • 更新 Knockout JS 映射插件中的子属性

    我遇到了淘汰赛 js 和具有分层视图模型的映射插件的问题 我的视图模型的结构有点像这样 VM members name name 1 volunteering name name 1 volunteering 每个成员都在一个选项卡中 每个
  • 如何在标签中制作文字自动换行

    我想在其中添加文字 a 标签适合固定的 div 但它会破坏 div 并且显示得很丑 CSS3 有一个属性 word wrap break word 看看MDN 自动换行文档 https developer mozilla org en CS
  • Apps 脚本列表项 - 制作项目符号而不是编号?

    我可以使用应用程序脚本中的appendListItem将一堆项目作为编号列表添加到谷歌文档中 有什么方法可以将其从编号更改为项目符号吗 你应该能够使用ListItem setGlyphType https developers google
  • 如何使用silverlight在文本框中创建水印?

    有人可以向我解释如何使用 silverlight 在文本框中创建水印吗 这就是您所需要的 http watermarktextbox codeplex com http watermarktextbox codeplex com
  • 如何在 标签中用 %20 替换空格

    我想替换 html 文本的图像标签中的所有空格 Example img src to img src photo 201 jpg 我没有找到 preg replace 的解决方案 但它可能是一个简单的正则表达式行 谢谢 Edit 抱歉各位
  • JavaScript 对象声明语法 - 变量名作为属性

    JavaScript 为您提供了多种声明对象的方法 当您手头有大部分可用数据时 最方便的 在我看来 如下 var person name John age 23 object literal syntax 这个语法的一个奇怪之处在于它与以下
  • 如何在Python Tensorflow-Keras中pickleweakref?

    我写了一个语音识别python 我使用了tensorflow keras模型 当我在运行 200 Epoch 后向模型提供输入时 出现异常 我尝试解决但它不起作用 我收到此错误无法腌制弱引用对象 异常跟踪 Exception in Tkin