初心者です。Python機械学習プログラミング[第2版]で勉強中です。
第9章 9.4.1で映画レビュー分類アプリケーションを作成しました。
ローカルサーバーで起動したらうまくいき、
PythonAnywhereにファイルをアップロードして、webを
1.映画レビュー入力画面
2.フィードバック入力画面
までは表示できるようになったのですが、
フィードバックをクリックすると、
以下のエラー表示の画面になります。
Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
コードは以下になります。
python
1from flask import Flask, render_template, request 2from wtforms import Form, TextAreaField, validators 3import pickle 4import sqlite3 5import os 6import numpy as np 7 8from vectorizer import vect 9 10app = Flask(__name__) 11 12cur_dir = os.path.dirname(__file__) 13clf = pickle.load(open(os.path.join(cur_dir, 'pkl_objects', 'classifier.pkl'), 14 'rb')) 15db = os.path.join(cur_dir, 'reviews.sqlite') 16 17def classify(document): 18 label = {0: 'negative', 1: 'positive'} 19 X = vect.transform([document]) 20 y = clf.predict(X)[0] 21 proba = clf.predict_proba(X).max() 22 return label[y], proba 23 24def train(document, y): 25 X = vect.transform([document]) 26 clf.partial_fit(X, [y]) 27 28def sqlite_entry(path, document, y): 29 conn = sqlite3.connect(path) 30 c = conn.cursor() 31 c.execute("INSERT INTO review_db (review, sentiment, date)"\ 32 " VALUES (?, ?, DATETIME('now'))", (document, y)) 33 conn.commit() 34 conn.close() 35 36class ReviewForm(Form): 37 moviereview = TextAreaField('', 38 [validators.DataRequired(), 39 validators.length(min=15)]) 40@app.route('/') 41def index(): 42 form = ReviewForm(request.form) 43 return render_template('reviewform.html', form=form) 44 45@app.route('/results', methods=['POST']) 46def results(): 47 form = ReviewForm(request.form) 48 if request.method == 'POST' and form.validate(): 49 review = request.form['moviereview'] 50 y, proba = classify(review) 51 return render_template('results.html', 52 content=review, 53 prediction=y, 54 probability=round(proba*100, 2)) 55 return render_template('reviewform.html', form=form) 56 57@app.route('/thanks', methods=['POST']) 58def feedback(): 59 feedback = request.form['feedback_button'] 60 review = request.form['review'] 61 prediction = request.form['prediction'] 62 63 inv_label = {'negative': 0, 'positive': 1} 64 y = inv_label[prediction] 65 if feedback == 'Incorrect': 66 y = int(not(y)) 67 train(review, y) 68 sqlite_entry(db, review, y) 69 return render_template('thanks.html') 70 71if __name__ == '__main__': 72 app.run()
エラーログは以下です。
2018-09-28 14:56:46,612: Exception on /thanks [POST]#012Traceback (most recent call last):#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 2292, in wsgi_app#012 response = self.full_dispatch_request()#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1815, in full_dispatch_request#012 rv = self.handle_user_exception(e)#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1718, in handle_user_exception#012 reraise(exc_type, exc_value, tb)#012 File "/usr/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise#012 raise value#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1813, in full_dispatch_request#012 rv = self.dispatch_request()#012 File "/usr/lib/python3.5/site-packages/flask/app.py", line 1799, in dispatch_request#012 return self.view_functionsrule.endpoint#012 File "/home/1976kaca/movieclassifier/app.py", line 67, in feedback#012 train(review, y)#012 File "/home/1976kaca/movieclassifier/app.py", line 26, in train#012 clf.partial_fit(X, [y])#012 File "/usr/lib/python3.5/site-packages/sklearn/linear_model/stochastic_gradient.py", line 540, in partial_fit#012 self._validate_params()#012 File "/usr/lib/python3.5/site-packages/sklearn/linear_model/stochastic_gradient.py", line 89, in _validate_params#012 if self.max_iter is not None and self.max_iter <= 0:#012AttributeError: 'SGDClassifier' object has no attribute 'max_iter'
AttributeErrorを解決するには、どこから手を付けたらいいのかわかりません。
教えていただけないでしょうか?
回答2件
あなたの回答
tips
プレビュー