2017-09-24 32 views
0

雖然我理解梯度下降是如何工作的,但我不知道動畫是怎麼回事.FuncAnimation函數。我花了4小時尋找解決方案,但不幸的是我不能。下面是我試圖重現(我用jupyter筆記本),但是當我運行它,我得到以下錯誤,animation.FuncAnimation ValueError:關閉文件上的I/O操作

ValueError Traceback (most recent call last) 
/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/IPython/core/formatters.pyc in __call__(self, obj) 
    309    method = get_real_method(obj, self.print_method) 
    310    if method is not None: 
--> 311     return method() 
    312    return None 
    313   else: 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/animation.pyc in _repr_html_(self) 
    1233   fmt = rcParams['animation.html'] 
    1234   if fmt == 'html5': 
-> 1235    return self.to_html5_video() 
    1236 
    1237 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/animation.pyc in to_html5_video(self) 
    1207         bitrate=rcParams['animation.bitrate'], 
    1208         fps=1000./self._interval) 
-> 1209     self.save(f.name, writer=writer) 
    1210 
    1211    # Now open and base64 encode 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/animation.pyc in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs) 
    1061       # TODO: See if turning off blit is really necessary 
    1062       anim._draw_next_frame(d, blit=False) 
-> 1063      writer.grab_frame(**savefig_kwargs) 
    1064 
    1065   # Reconnect signal for first draw if necessary 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/contextlib.pyc in __exit__(self, type, value, traceback) 
    33     value = type() 
    34    try: 
---> 35     self.gen.throw(type, value, traceback) 
    36     raise RuntimeError("generator didn't stop after throw()") 
    37    except StopIteration, exc: 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/animation.pyc in saving(self, *args, **kw) 
    287    yield self 
    288   finally: 
--> 289    self.finish() 
    290 
    291  def _run(self): 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/animation.pyc in finish(self) 
    307  def finish(self): 
    308   'Finish any processing for writing the movie.' 
--> 309   self.cleanup() 
    310 
    311  def grab_frame(self, **savefig_kwargs): 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/animation.pyc in cleanup(self) 
    346  def cleanup(self): 
    347   'Clean-up and collect the process used to write the movie file.' 
--> 348   out, err = self._proc.communicate() 
    349   self._frame_sink().close() 
    350   verbose.report('MovieWriter -- ' 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/subprocess32.pyc in communicate(self, input, timeout) 
    925 
    926   try: 
--> 927    stdout, stderr = self._communicate(input, endtime, timeout) 
    928   finally: 
    929    self._communication_started = True 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/subprocess32.pyc in _communicate(self, input, endtime, orig_timeout) 
    1711    if _has_poll: 
    1712     stdout, stderr = self._communicate_with_poll(input, endtime, 
-> 1713                orig_timeout) 
    1714    else: 
    1715     stdout, stderr = self._communicate_with_select(input, endtime, 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/subprocess32.pyc in _communicate_with_poll(self, input, endtime, orig_timeout) 
    1767    select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI 
    1768    if self.stdout: 
-> 1769     register_and_append(self.stdout, select_POLLIN_POLLPRI) 
    1770     stdout = self._fd2output[self.stdout.fileno()] 
    1771    if self.stderr: 

/home/gopinath/Workspace/anaconda3/envs/py27/lib/python2.7/site-packages/subprocess32.pyc in register_and_append(file_obj, eventmask) 
    1746    poller = select.poll() 
    1747    def register_and_append(file_obj, eventmask): 
-> 1748     poller.register(file_obj.fileno(), eventmask) 
    1749     self._fd2file[file_obj.fileno()] = file_obj 
    1750 

ValueError: I/O operation on closed file 
<matplotlib.animation.FuncAnimation at 0x7f085e3c0fd0> 

尋找一些幫助的代碼

%matplotlib inline 
import math,os,sys,numpy as np 
from numpy.random import random 
from matplotlib import pyplot as plt, rcParams, animation, rc 
from __future__ import print_function, division 
from ipywidgets import interact, interactive, fixed 
from ipywidgets.widgets import * 
rc('animation', html='html5') 
rcParams['figure.figsize'] = 3,3 
%precision 4 
np.set_printoptions(precision=4, linewidth=100) 

def lin(a,x,b): return a * x + b 

a = 3. 
b = 8. 
n = 30 

x = random(n) 
y = lin(a,x,b) 

plt.scatter(x,y) 

def sse(y, y_pred): return ((y-y_pred)**2).sum() 
def loss(y, a, x, b): return sse(y, lin(a, x, b)) 
def avg_loss(y, a, x, b): return np.sqrt(loss(y, a, x, b)/n) 

a_guess = -1 
b_guess = 1 
avg_loss(y, a_guess, x, b_guess) 

lr = 0.01 
#d[(y-(a*x+b))**2, b] = 2 (y_pred - y) 
#d[(y -(a*x+b)) **2, a] = x * dy/db 

def upd(): 
    global a_guess, b_guess 
    y_pred = lin(a_guess, x, b_guess) 
    dydb = 2 * (y_pred - y) 
    dyda = x * dydb 
    a_guess -= lr*dyda.mean() 
    b_guess -= lr*dydb.mean() 


fig = plt.figure(dpi=100, figsize=(5,5)) 
plt.scatter(x,y) 
line, = plt.plot(x, lin(a_guess, x, b_guess)) 
plt.close() 

def animate(i): 
    line.set_ydata(lin(a_guess, x, b_guess)) 
    for i in range(10): upd() 
    return line, 


ani = animation.FuncAnimation(fig, animate, np.arange(0, 40), interval=100) 
ani 

感謝提前:)

+0

代碼對我來說沒有問題。 – ImportanceOfBeingErnest

+0

奇怪!我不知道哪裏出了問題,但在課程論壇中我沒有看到像我這樣的單個問題。可能這會讓我覺得我只有這個問題。順便說一句你使用的是什麼版本的python,OS和anaconda? – gopi

+0

我已經在Firefox瀏覽器中測試了Windows 8.1,Python 2.7,matplotlib 2.0.2,jupyter筆記本服務器4.4.1與Ipython 5.3的代碼。 – ImportanceOfBeingErnest

回答

0

我同樣的問題。

我的解決辦法是安裝最新的ffmpeg

sudo apt-get update install ffmpeg 
0

我有同樣的問題。我使用的是使用conda安裝的ffmpeg。我有使用刪除:

conda remove ffmpeg 

然後我用apt安裝了它:

sudo apt-get install fmpeg 

好像有與暢達版中的問題。

相關問題