肉眼天文台

食メモとかたまに囲碁とか趣味についての雑記です

パン作り黙示録〜その1〜

これはひょんな事からシロカのホームベーカリーを手に入れた男が、

意気込んで自家製パンを作ったはいいものの、

アレルギーを発症してしまい、

小麦原料を使わない至高の米粉パンを製造できるようになるまでの記録である。

 

初回の今回は、

まだ発症する前の最後に作ったレーズンパンの記録をここに残していく。

材料はざっと以下のような、なんの変哲もないよくある一式だ。

レシピは付属のシロカによる福音書を参考にした。

f:id:Wjenga:20230425182705j:image

 

まずは必要量の水を入れた容器に強力粉を量り入れる。

減らす前にゼロを押して、減った量で量る派閥なので、

写真は容器に小麦粉を入れる前のものだ。

f:id:Wjenga:20230425182651j:image

 

少し均す。この一手間が結果を大きく左右するらしい。

f:id:Wjenga:20230519200949j:image

 

ちなみに入れた後の秤の表示はこうなる。
f:id:Wjenga:20230425182634j:image

 

砂糖(三温糖)、塩、バターを入れるが、ここで気をつけてほしいのが、

それぞれの配置である。

砂糖はイースト菌の主食になる。

すなわち、砂糖は真ん中にする。

塩は濃度が高いとイースト菌はやる気をなくしてしまう。

すなわち、塩は四隅に配置する。

バターも同様四隅に配置する。
f:id:Wjenga:20230425182643j:imagef:id:Wjenga:20230425182728j:imagef:id:Wjenga:20230425182720j:image

 

入れるべき材料を入れたら、

シロカの生地コースで始める。

少し混ざったところでレーズンを入れる。
f:id:Wjenga:20230425182656j:image

 

出来上がった生地の塊を小分けして成形したら、

固く絞ったキッチンペーパーをかけて生地を寝かせる。
f:id:Wjenga:20230425182714j:image

 

チラ見せ。
f:id:Wjenga:20230425182626j:image

 

寝かせた生地を包んで、オーブンで発酵させたら、

罪深い味になるように生地の真ん中に十字傷を入れて、

溶き卵を生地の表面に塗り、傷口に砂糖をまぶす。

最後にオーブンで焼けば、

レーズンパンが出来上がる。

f:id:Wjenga:20230425182535j:image

 

次回!パン作り黙示録〜その2〜

パンでもない、ご飯でもない、もちでもない。

これが米粉で作るパン!?

 

最近の化学品の市場動向が気になったので

まずは酢酸について

どうせ中国がつよつよなんだけど一応落ちてた記事

市場としては成長動向にあるらしい

https://prtimes.jp/main/html/rd/p/000000141.000071640.html

 

一応、化学に携わってた身としては、テレフタル酸の原料は酢酸ではないのだが笑

テレフタル酸は、パラキシレンを原料に空気によって酢酸溶媒中で触媒を用いて液相酸化して生産されてるはずなので、この手の記事作る系の会社のどっか顧問契約してくれないかな笑

まぁ結局この手の記事読む側もそこまで化学に詳しくない前提なら、需要ないだろうけど

 

となると、次はパラキシレンについて

パラキシレンも成長動向にあるらしい

https://icrowdjapanese.com/2022/02/23/%E3%83%91%E3%83%A9%E3%82%AD%E3%82%B7%E3%83%AC%E3%83%B3%E5%B8%82%E5%A0%B4%E8%A6%8F%E6%A8%A1%E4%BA%88%E6%B8%AC%E3%80%812026%E5%B9%B4%E3%81%BE%E3%81%A7%E3%81%AB685%E5%84%84%E7%B1%B3%E3%83%89%E3%83%AB/

 

PET製造の原料が伸び傾向なのはいわゆるCOVID-19明けだからなのかね

中国が消費と製造を頑張っている模様

 

続いてはポリエチレンについて

ポリエチレンは市場として飽和してるから成長とかないんだろうな感

https://www.yano.co.jp/press-release/show/press_id/2771

 

一方でみんな大好きスタバのストローに使われてたポリプロピレン

市場規模がエグいな

それでいてまだ成長している

https://www.mordorintelligence.com/ja/industry-reports/polypropylene-market#:~:text=Download%20Free%20Sample-,%E5%B8%82%E5%A0%B4%E6%A6%82%E6%B3%81,%E3%81%99%E3%82%8B%E3%81%A8%E4%BA%88%E6%B8%AC%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

 

余談だけど、最近槍玉に上がってるストロー、スプーン、フォークがなんで槍玉に上がってるのかしらべてみた

海洋ゴミの中ではダントツトップを走るのは、煙草の吸殻らしい。初めて知ったが、やっぱタバコ吸うような人は世界的にお里が知れるということですねぇ。ただ、煙草の吸殻が許されてないけど、なんとなーく許されてる感があるのは、おそらくフィルムに使われる酢酸セルロースが生分解性ってところなんじゃないかなと

その後に続くのは、食品包装とプラボトルこの2つはどうにも避けようのない感がある。ただ後者は、水筒で避けれなくもないが、スタバのタンブラー持参みたいな感じで

前者は弁当容器持ち込み割引みたいなビジネスモデルが成立するかどうか

大手の弁当チェーンならできなくもないか

個人的にはこういうポジティブなデフレやインフレなら問題ないと思ってるけど、ネガティブインフレは辛いね

その次がストローの前に槍玉に上がったプラ袋

やはりここは真っ先に対策できるってところがデカかったんだろうな

で、次はプラストローが対策できるだろうと

これも立派なデータ解析の結果なので喜ばしいことだと思う

https://oceanconservancy.org/wp-content/uploads/2018/07/Building-A-Clean-Swell.pdf

 

しれっと環境問題に話題をすり替えたが、これって市場規模にどれくらい影響があるのかなと、少なくとも日本では大きな変化がありそうだけど、世界的に見ると牽引する中国が環境問題に本気になるまでは成長が続くだろうな

僕と有機合成化学とこれからについて

僕は三度の飯より有機合成化学が好きだった。

初めにこれだけは全世界の人間に向けて間違いなく大声で言えるということだけは言っておきたかった。公共放送で流したっていい。

だけど、これから話すのは、僕の自分勝手な解釈に基づく後悔であり、負け犬の遠吠えであり、有機合成化学に対する愛であり、人生に対する絶望かもしれないし、あるいは何十年か先の未来に対する希望かもしれない。

 

先立って言っておくと、多少推敲はしたのだが、読めば支離滅裂な内容であることがわかると思う。これは誰かの共感を得たいわけでも、誰かを暗に攻撃したいわけでもなく、自分の現在地に至るまでの経緯を書き記すことで、自分の中での感情の整理と、似た境遇にいたり、後に近しい境遇を迎える誰かに読んでもらって、あわよくば、自分には思いつくことができなかった最善手があれば教えてもらいたいというそんな他力本願寺な回顧録である。

あと、記念すべき100件目の記事がまさかこんなことになろうとは。。。

 

まずは、アカデミアでの生活を終えるにあたり、これまでのことと、これからのこととかを少しばかり話してみたいと思う。

学部4回生での研究室配属からおよそ8年半、4大学を渡り歩いて大学で有機合成化学の研究に従事してきた。自分で言うのもなんだが、一生懸命やったかいあって、それ相応の結果として、学振も取れたし、論文もそれなりに書いて出して、最後には賞もいただけたのかのと思っている。研究を辞めることに後悔がないと言えるかと問われれば、はっきり言って後悔だらけになる。

心境や状況や将来を加味して自分で決めたにも関わらず後悔だらけの人間のポエムや、本当は大声で言いたかったことも含めて、今日くらいは悦に浸って書き残そうと思う。

 

母校への感謝

巷ではエスカレーターとかエレベーターとか揶揄される母校に、中学から博士号を取るまでおよそ15年通った。博士号をとって賞までもらったと書くと、生まれた頃からたいそう頭の出来がいい人間だったと思われるかもしれないが、そうである部分もあるしそうではない部分もある。中学受験で母校に入る前の小学校では、頭一つ抜けていたと思う。ただ、中学受験のための塾に入ると自分より凄いやつがわんさかいて、彼彼女らは、それこそ3度の飯を食う間も勉強していて、挫折を味わった。僕は彼らのようにはなれない。なんとか中学受験を経て私立中学に進学したものの、そこでもまた挫折を味わうことになる。そして気がつけば、高校2〜3年の理系科目の試験で100点満点の試験で一桁を含む赤点を連発していた。大学の付属してない普通の高校で、受験を控えた高校3年の理系科目の試験で赤点連発しようものなら、普通に理系の学科の受験なんてもってのほか、進路相談で背中を引っ張られ諭されていたのだろうと勝手に思っているのだが、母校には自分が今の進路を進む大きな後押しをしてくれた担任がいた。そのおかげで三度の飯より好きだと言い張れる有機合成化学に出会えたと言っても過言ではない。その後に出会った指導教授との話をしだすと個人の特定と、このブログの趣旨が変わりそうなので、ここでは簡潔に済まさせていただこうと思う。学部4回生での研究室配属から博士号を取得するまで、飯を食うには困らないくらいまで鍛えてもらったことには、ただただ感謝している。

 

研究をやめることになった理由

決断したのは自分の意志ではあるが、様々なきっかけや要因が複合的に絡み合った結果であることは間違いない。

第一の要因

まず第一の大きな要因は、いくつかの外的圧力である。日常生活では口にも出せない理由であるので、遠回しに言えば自分の人生が自分だけのものではなくなってしまったことがやめる決断に至った最大の理由だと思う。誤解を避けるために説明すれば、誰が悪いわけではなく、自分がその立場なら当然自分の不安を口にしてしまうだろうことは想像に難くない。また、世のおっさんというものは、自分の成功という一分の一の成功例を最大化して、他人にその道を押し付けてしまうものなのである。ポジティブに考えるならば、本人らにそのつもりはなくとも、そういったものを外的圧力という風に受け取ってしまうのだというある意味では、人生や今後の子育てにおいて、貴重な経験ができたとも言える。ともあれ不可避のイベントにエンカウントしてしまったことで、自分の中で研究をやめる決断を加速させてしまったというのは少なからずあると思う。

ただもちろん自分の不安を口にすることが悪いわけではなく、本人以外の誰かが不安になるような雇用環境には問題があるだろう。ポスドク、特任ポジション、任期付き雇用、はっきり言って若手研究者の雇用環境は不安定である。不安定な雇用について、自分としては全くそんなことはどうでもいい。三度の飯より好きなので、道端の草を食ってでも、研究ができればそれが幸せだと思っている。しかし、自分の周囲にいる研究と縁のない多くの常識的な人間はそれを許さないし、妻も普通の人間なら本音のところでは許したくないだろう。

自分がどれだけ一生懸命に研究をやって、論文を書いて、学会で発表して、賞をとったとしても、間近でその姿を見ていない人間たちからすれば、そんなものは自分の好きなことを好き勝手にやってるおっさんの自慰にしか過ぎないのだ。理解のない大人たちからすれば、僕のやってることは、責められはすれど、到底褒められたことではないのだ。

自分だけが子供で周囲の大人たちは諭したつもりなのかもしれないが、ただただ僕の努力を否定することで、自分の不安を解消しただけである。そんな相手の見えない努力も想像できない人間達を相手に、こればっかりは話し合って理解や解決どころか妥協点が見いだせるような話ですらないのだ。僕以外の人間が納得する形で、これを迅速に解決する唯一の手段は、僕が自分の好きを閉じ込めて鍵をかけて、目に見える形で終身雇用の奴隷契約を企業と結んで働くことだった。

誰かに認められたり承認欲求を満たすために研究をやってきたわけではなかったし、自分の好奇心に従って、自分なりに真理を追いかけてきたつもりだった。そんな中でも、国民の血税で研究をしている立場でもあるので、また母校での教えもあって、You Tubeで公言するくらいには、自分のためだけではなく、日本のより良い未来のために貢献したいという思いもあった。けれど、自分の中でなにかプツンと糸が切れてしまったのだ。

ただ、自分にもプライドってものがある。このまま中途採用として、どこかの企業で研究を続ける道もあったし、いわゆる転職サイトに登録して、オファーやスカウトを受けていたので、それに乗っかる手もあったが、なぜか自分はそうしなかった。

このとき、他人につべこべ言われた程度で、研究をやめる決断ができたしまった自分に驚くとともに、どこか仕事として研究をすることに向いていない自分に気がついていたからである。

自分の中で薄々気がついてはいたが、仕事として、これをやれって言われて研究をやったり、やらなきゃいけないという心境で研究をやるのが苦手である。やらなきゃいけないことが山積みなときほど、常に色々なアイデアが溢れすぎているが故に、いわゆる闇実験に相当するようなやりたいことをやってしまう。博士課程までの自分が学費を払っている立場なら何をやっても自分の中の好奇心だけを追いかけて良かったのかもしれない。けれど、雇っている側からしたら、やってもらいたいことがあるから雇っているわけで、本来の業務に専念していないことになる。

このまま誰かの下で研究を続けて、小間使として働くには限界が来ているという予感があった。どうせアカデミアを辞めるなら、いっそ研究から離れてみようという気持ちもあって、これからは普通のさえないサラリーマンとして働くことにした。

第二の要因

第二の要因は、環境の変化である。これもこの業界特有の雇用環境の不安定さに関係しているかもしれない。

前述のような外的圧力の中、当初は3〜4年くらいは外的圧力をのらりくらりと躱しつつ、タイミングを模索しようと思っていた矢先に、業界特有の突然の不可避イベントにエンカウントしてしまった。直属の上司の移籍である。

このとき思ったのは、運や天すら味方してくれないのかということだった。僕が当初、外的圧力に抵抗すべく説明していた3〜4年くらいは今の職場でという約束を、半年経たずに破ってしまったのである。これもまた、終身雇用の会社で安定して働いてきた大人たちと話して理解や解決どころか妥協点が見いだせるような話ですらないのだ。

他にもインフレとか細かい要因はいくつかあるが、今となっては第一と第二の要因が重なった時点で、ほぼアカデミアでの研究の継続は、自分の中ではゲームオーバーになったといっても過言ではなかった。人間同士が分かり合うのは本当に難しいのだなとつくづく思う。そのときの追い詰められた自分に残されたのは、研究の継続か妻との生活の継続かの二択だった。今思えば、もっと他の選択肢もあったように思うが、冷静さを欠いていたこともあって、その二択を選ばざるを得なかった。後悔ばかりを吐露しているが、それは後者を選んだことに対してではないし、何度同じ境遇に至っても自分は後者を選ぶだろう。結果は変わらない。

とはいえ、これまでの説明だと他人のせいだと言わんばかりの言い分だが、

あくまでもこれらの結果の起点は、自分の進路選択のミスと、他人に説明して納得してもらうだけの研究を継続することに対する情熱がもう自分の中になかったことである。

何が言いたいんだと思うかもしれない。自分でも感情を正確に把握できてないこともあって、こうやって書き出してみている次第だ。

自分一人が研究を継続しなかったからといって、世界がどうなるわけでもなく、自分より優秀な研究者も、自分の代わりになる研究者も、いくらでもいる時代なので、特に最近の中国の勢いは本当にスゴい。日々の論文チェックでも、雑誌会(おすすめの論文を紹介し合う会)でも、目に留まる論文の筆者が中国人であることが多々ある。また、留学中に会った中国人たちもみんなものすごい研究に対する情熱を持っていた。こればかりは、我々も見習うべきものがある。そういう意味ではやはり、自分の中で研究に対する情熱が維持できるほどのモチベーションがもうなかったのだと思う。

 

余談(負け犬の遠吠え)

僕にとっては研究における困難や逆境は、その解決に至るまでに努力や苦労はしたけれど、どれも楽しかった記憶として残っている。なんなら、うまくいかないときは、気分転換に都会まで出ていって朝までクラブやバーで飲んではしゃいでパーリナイして、始発でラボに戻って、実験していたくらいだ。よく後輩や学生に学生時代に一番しんどかったことを聞かれたりして、そんなことは一度もなかったなんて言うのもイヤミか強がりにしか聞こえないように思えて、どう答えたものか困っていた。正直なところを言うと、学生時代に一番しんどかったことは、僕が自分で選んだ研究に生きるという人生に理解を示さない周囲の人間たちとの会話である。本人たちにその気はなくても、不安の塊という石を投げつけられ、無視しようがどう答えようが、否定される。それが年に数回ならまだしも、避けようのない毎日帰る場所での出来事である。当然、いじめと同じで本人たちはそんなつもりでは言っていないと言うだろうし、言った自覚すらなければ、僕が何度もやめてくれと言ったことすら覚えてすらいないだろう。僕も彼らのために生きているわけではないので、そこまで説得に時間を費やすわけにはいかない。年に数回会う祖母だけが味方だった。それでもモチベーションを維持できたのは、今でもファンとして応援しているアイドルのももいろクローバーZ、たこ虹、neo breakの歌や、心震わせる漫画やアニメのキャラの言葉だった。主にジャンプの漫画中心にはなるが、Dr.ストーンや左ききのエレン、仁は落ち込んだときにおすすめ。ジャンプ以外だとはじめの一歩とか、最近だとチ。がおすすめなので、ぜひ。アニメはグレンラガンとかガンダムUCとか他にもいろいろあるが、心の支えになる言葉をもらった。

しかし、これからはある意味ではもうそういったモチベーションを維持するための何かに依存する必要もないのかもしれない。今となっては、早朝から深夜まであれほどまでに自分を突き動かしていた情熱は何だったのだろうかと思う。このあと語る有機合成化学に対する愛も段々と薄れているように感じる。

後悔や悔しいと思うことを列挙すればキリがないのだが、今の自分の環境が非正規雇用であることは、はたからみればサボっているからそうなっているように見えたのかもしれないし、状況を変えようと努力もせずに受け入れているように見えたのかもしれない。それでも、自分としては何十年も先の日本の未来のために、たとえ今の自分の環境が不安定だったとしても、自分なりに研究の最前線で戦ってきたきたつもりだった。それが伝わらないことが本当に悔しかった。少なからず、自分の人生や何かと戦って生きてきたはずだろうし、それは決して、誰もが目にするところでやるような努力パフォーマンスではなかったはずだろうし、あるいは自分の比じゃないくらい戦ってきたはずなのに、伝わらない。言葉では表せないモヤモヤがどんどん自分の心を蝕んでいるのがわかった。

最初の「三度の飯より有機合成化学が好きだった。」も、初めは「だ。」で締めていたのだが、もう研究をやめてしまった自分は「だった。」とするべきだなと思い、後から「だった。」とした。この先どこまでいっても自分の人生には、自分の好きを押し殺してしまったという後悔がずっと重くのしかかるのだという絶望だけが残っている。自分がなんでこんな選択をしてしまって、人生がこれからどうなっていくのか分からない。ただ、この先も自分がどれだけ頑張ったとしても、その結果が目に見える形の賞として理解ある大人たちに認めてもらえたとしても、不安定な雇用である限りは、理解のない大人たちには伝わらないし、僕のことを思ってと言いながら俺の不安を解消しろという石を何度も投げつけ続けられ、彼らの1/1の成功体験からくる幸せの価値観の再現実験を僕が成功するまでは、モルモットのように自分の信じる道を歩くことを妨害され続けて、研究に対する情熱もモチベーションも失った自分は、その度に絶望の淵に沈んでいくのだろうというそんな暗い未来しか見えなくなるくらいには、今の自分は心が疲れてしまった。

以上。余談である。

 

有機合成化学に対する愛

最初にも言ったが、僕は三度の飯より有機合成化学が好きだった。

あまり愛を語ると本人が特定できてしまいそうだが。。。自分がこんな気持ちを持っていたときがあったことを、この先忘れてしまわないように。もし忘れてしまってもまたいつか思い出せるように。これから僕が叫ぶ愛が、悲痛な叫びに聞こえたならば、どうか自分の好きを大切にしてあげられなかった自分の代わりに、その他人を想う優しい心持った自分を大切にしてあげて欲しい。

自分で分子を設計したり、標的分子を決めて、分子を実際に合成して、その構造をNMR、単結晶X線構造解析で確定する。それを最後に論文や学会発表としてまとめる。そういう過程が楽しく好きだ。

教科書だとJones著が好きだ。

周期表の元素だとリンが好きだ。

試薬メーカーはTCIが好きだ。

好きな研究者はC. C. Cumminsだ。

好きな論文誌はAngewandte Chemieだ。

特に1964年前後は最高にアツい。

アッペル反応が好きだ。

TLCを焼いて見えるスポットが好きだ。

蒸留の1滴目が出る瞬間が好きだ。

再結晶が好きだ。

単結晶X線構造解析が好きだ。

SPring-8が好きだ。

Yadokari-XGが好きだ。

SHELX-Tが好きだ。

13C NMRの帰属が好きだ。

質量分析のMS/MS測定が好きだ。

好きなイオン化法はESIだ。

IRスペクトルが好きだ。

Gaussian推し、xTBもORCAも好きだ。

GCのFIDボックスが好きだ。

HPLCの起動音が好きだ。

そして何より、キラキラした目で有機合成化学を語る人たちが好きだ。

 

これからについて

せっかく研究をやめるので、有り余る時間でたまり溜まった論文を整理したり、ブログも書いて、積み本を読んだり、クソゲー作ったり、囲碁も打ちたいし、久しぶりに趣味の時間にどっぷり浸かりたい。

さえないサラリーマンをしながら、自分の好きと向き合って、その中でまた何か見えてくるものがあるかもしれないし、このまま多くの大人たちと同じように、ただただ日々をすり減らしてゆっくりと坂を降りていくだけかもしれない。

少なくとも、自分の好きに正直でいられないままでは、博士課程で経験したような寝食を忘れて熱中するような、情熱的な日々はもうかえってこないかもしれないという予感だけはある。

先の話では、環境的な要因を多く述べたが、今はまだ道半ばではあるが、これから日本の研究者の環境もどんどん改善されていくだろうなという改革が進められている。研究と一緒でその積み重ねの間に紆余曲折があるだろう。しかし、みんなその先のよりよい未来を想像して改革を進めてくれている。ときに批判的に、ときに建設的に、議論を積み重ねて進んでいけば、きっと日本の研究者の環境も今より良くなると信じている。

 

おわりに

自分の背中を押してくれた人たちには、最後まで自分の好きを押し通せなかったことを、本当に申し訳ないと思う。

これまでの道のりも決してみんながみんな大手を振って応援してくれるような道のりではなかったけど、そんな中でも自分の心の支えになる言葉をたくさんもらったし、それがなかったらここまで自分の好きを押し通せなかったことは間違いないので、自分の背中を押ししてくれた人たちに、この場を借りて感謝の言葉を伝えて締めくくりとしたい。

 

長い間!クソありがとうございました!自分の好きを大切にして歩んだ8年半の研究生活は、決して平坦ではなかったけれど、少なくとも自分の生きてきたこれまでの人生の中で、最高にアツくて楽しい時間でした!次回作にご期待ください!

独学でPythonその4~DeepChem遊んでみたの巻~

DeepChemがすごいらしいというので、以下のサイトを参考に遊んでみた。

qiita.com

 

 

 

まずは例のごとくosしてパスを通す。

import os
import deepchem as dc

current_dir = os.path.dirname(os.path.realpath("__file__"))
dataset_file = "medium_muv.csv.gz"
full_dataset_file = "muv.csv.gz"

# We use a small version of MUV to make online rendering of notebooks easy. Replace with full_dataset_file
# In order to run the full version of this notebook
dc.utils.download_url("https://s3-us-west-1.amazonaws.com/deepchem.io/datasets/%s" % dataset_file,
current_dir)

dataset = dc.utils.save.load_from_disk(dataset_file)
print("Columns of dataset: %s" % str(dataset.columns.values))
print("Number of examples in dataset: %s" % str(dataset.shape[0]))

 

出力結果

Columns of dataset: ['MUV-466' 'MUV-548' 'MUV-600' 'MUV-644' 'MUV-652' 'MUV-689' 'MUV-692'
'MUV-712' 'MUV-713' 'MUV-733' 'MUV-737' 'MUV-810' 'MUV-832' 'MUV-846'
'MUV-852' 'MUV-858' 'MUV-859' 'mol_id' 'smiles']
Number of examples in dataset: 10000

 

サンプルデータセットを手に入れた☆☆☆

 

 

正直、このコマンド打ち込んだあとビビりましたね。

smilesから起こして普通にきれいに分子表示されてるやん。。。ってね。

アダマンチルちょっとキモいけど、全然普通。

from rdkit import Chem
from rdkit.Chem import Draw
from itertools import islice
from IPython.display import Image, display, HTML

def display_images(filenames):
"""Helper to pretty-print images."""
for filename in filenames:
display(Image(filename))

def mols_to_pngs(mols, basename="test"):
"""Helper to write RDKit mols to png files."""
filenames =
for i, mol in enumerate(mols):
filename = "MUV_%s%d.png" % (basename, i)
Draw.MolToFile(mol, filename)
filenames.append(filename)
return filenames

num_to_display = 12
molecules =
for _, data in islice(dataset.iterrows(), num_to_display):
molecules.append(Chem.MolFromSmiles(data["smiles"]))
display_images(mols_to_pngs(molecules))

 

出力結果

f:id:Wjenga:20200609214945p:plain

以下略

 

num_to_displayの数を増やせばもっといっぱい表示できる模様。

 

ここで謎の操作が現れた。

MUV_tasks = ['MUV-692', 'MUV-689', 'MUV-846', 'MUV-859', 'MUV-644',
'MUV-548', 'MUV-852', 'MUV-600', 'MUV-810', 'MUV-712',
'MUV-737', 'MUV-858', 'MUV-713', 'MUV-733', 'MUV-652',
'MUV-466', 'MUV-832']

featurizer = dc.feat.CircularFingerprint(size=1024)
loader = dc.data.CSVLoader(
tasks=MUV_tasks, smiles_field="smiles",
featurizer=featurizer)
dataset = loader.featurize(dataset_file)

 

 

どうやら、すでに組まれたfeaturizerを利用してsmiles形式から勝手に特徴量(fingerprintと呼ばれている)を取得してデータを取り込むらしい。 

以下参照

fantom-zona.hatenablog.com

 

いつもの前処理

splitter = dc.splits.RandomSplitter(dataset_file)
train_dataset, valid_dataset, test_dataset = splitter.train_valid_test_split(
dataset)
#NOTE THE RENAMING:
valid_dataset, test_dataset = test_dataset, valid_dataset

 

いつもの前処理だけどこれも事前に組まれたdc.splits.ScaffoldSplitterを使うと

なんかいい感じにしてくれるらしいです。

 

いざ!学習!

import numpy as np
import numpy.random

params_dict = {"activation": ["relu"],
"momentum": [.9],
"batch_size": [50],
"init": ["glorot_uniform"],
"data_shape": [train_dataset.get_data_shape()],
"learning_rate": [1e-3],
"decay": [1e-6],
"nb_epoch": [1],
"nesterov": [False],
"dropouts": [(.5,)],
"nb_layers": [1],
"batchnorm": [False],
"layer_sizes": [(1000,)],
"weight_init_stddevs": [(.1,)],
"bias_init_consts": [(1.,)],
"penalty": [0.],
}


n_features = train_dataset.get_data_shape()[0]
def model_builder(model_params, model_dir):
model = dc.models.MultitaskClassifier(
len(MUV_tasks), n_features, **model_params)
return model

metric = dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean)
optimizer = dc.hyper.HyperparamOpt(model_builder)
best_dnn, best_hyperparams, all_results = optimizer.hyperparam_search(
params_dict, train_dataset, valid_dataset, [], metric)

 

出力結果

Fitting model 1/1
hyperparameters: {'activation': 'relu', 'momentum': 0.9, 'batch_size': 50, 'init': 'glorot_uniform', 'data_shape': (1024,), 'learning_rate': 0.001, 'decay': 1e-06, 'nb_epoch': 1, 'nesterov': False, 'dropouts': (0.5,), 'nb_layers': 1, 'batchnorm': False, 'layer_sizes': (1000,), 'weight_init_stddevs': (0.1,), 'bias_init_consts': (1.0,), 'penalty': 0.0}

 

Model 1/1, Metric mean-roc_auc_score, Validation set 0: 0.532706
best_validation_score so far: 0.532706
Best hyperparameters: ('relu', 0.9, 50, 'glorot_uniform', (1024,), 0.001, 1e-06, 1, False, (0.5,), 1, False, (1000,), (0.1,), (1.0,), 0.0)
train_score: 1.000000
validation_score: 0.532706

 

なるほどわからん。

 

dc.splits.ScaffoldSplitter使って、いい感じにしてくれたらしい方の出力結果

Fitting model 1/1
hyperparameters: {'activation': 'relu', 'momentum': 0.9, 'batch_size': 50, 'init': 'glorot_uniform', 'data_shape': (1024,), 'learning_rate': 0.001, 'decay': 1e-06, 'nb_epoch': 1, 'nesterov': False, 'dropouts': (0.5,), 'nb_layers': 1, 'batchnorm': False, 'layer_sizes': (1000,), 'weight_init_stddevs': (0.1,), 'bias_init_consts': (1.0,), 'penalty': 0.0}

 

Model 1/1, Metric mean-roc_auc_score, Validation set 0: 0.735025
best_validation_score so far: 0.735025
Best hyperparameters: ('relu', 0.9, 50, 'glorot_uniform', (1024,), 0.001, 1e-06, 1, False, (0.5,), 1, False, (1000,), (0.1,), (1.0,), 0.0)
train_score: 1.000000
validation_score: 0.735025

 

たしかにスコアが良くなっとるな。

なるほど、なるほど、わからん。

 

 

 

独学でPythonその3~Pythonで論理ゲートを作って遊んでみたの巻~

前回の

wjenga.hatenablog.com

を経て、背伸びし過ぎたので志向を変えて遊んでみた。

以下、参考にしたサイトなど

www.geeksforgeeks.org

 

まずはNOTゲートをdef使ってNOTの操作を定義して

今回は後々これ使って色々したいのでおまじない

if __name__=='__main__':

を入れてる。

blog.pyq.jp

 

def NOT(a):
if(a == 0):
return 1
elif(a == 1):
return 0

if __name__=='__main__':
for xs in [(0), (1)]:
y = NOT(xs)
print(str(xs) + " -> " + str(y))

 

出力結果

0 -> 1
1 -> 0

 

素晴らしい。NOTゲートの完成だ。

 

続いてORゲートを作る。

def OR(a, b):
if a == 1:
return 1
elif b == 1:
return 1
else:
return 0

if __name__=='__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = OR(xs[0], xs[1])
print(str(xs) + " -> " + str(y))

 

出力結果

(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 1

 

素晴らしい。ORゲートの完成だ。

 

 ちなみにnumpy使って作るとこうなるらしい。

 

import numpy as np


def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([1, 1])
b = -0.9
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1

if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = OR(xs[0], xs[1])
print(str(xs) + " -> " + str(y))

 

いや長いw必ずしもimport numpy as npすればいいわけではないと。。。

 

続いてANDゲートを作る。

def AND (a, b):
if a == 1 and b == 1:
return 1
else:
return 0

if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = AND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))

 

出力結果

(0, 0) -> 0
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 1

 

素晴らしい。ANDゲートの完成だ。

 

ちなみにnumpy使って作るとこうなるらしい。 

import numpy as np


def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([1, 1])
b = -1
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1

if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = AND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))

 

 

最後は納戸・・・NANDゲートを作る。

def NAND (a, b):
if a == 1 and b == 1:
return 0
else:
return 1

if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = NAND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))

 

出力結果

(0, 0) -> 1
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0

 

素晴らしい。NANDゲートの完成だ。

 

ちなみにnumpy使って作るとこうなるらしい。 

import numpy as np


def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.9, -0.9])
b = 1
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1

if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = NAND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))

 

結局NANDゲートが一つあれば事足りるらしい。

 

おまけのNORゲート

def NOR(a, b):
if(a == 0) and (b == 0):
return 1
elif(a == 0) and (b == 1):
return 0
elif(a == 1) and (b == 0):
return 0
elif(a == 1) and (b == 1):
return 0

if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = NOR(xs[0], xs[1])
print(str(xs) + " -> " + str(y))

 

出力結果

(0, 0) -> 1
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 0

 

素晴らしい。NORゲートの完成だ。

 

 

 

 

独学でPythonその2~aerial-cactus-identificationで遊んでみたの巻(後半)~

 前回まででデータを色々見てみたけど、やっとこ画像を触り始める。

wjenga.hatenablog.com

 

これで画像をリサイズしたり、並べたりラベルつけたり

正直なにやってるかわからんから次回は再びもっと簡単なのに戻ろうね。

IMAGE_SIZE = 96

def _parse_fn(filename, label):
  image_string = tf.io.read_file(filename)
  image_decoded = tf.image.decode_jpeg(image_string)
  image_normalized = (tf.cast(image_decoded, tf.float32)/127.5) - 1
  image_resized = tf.image.resize(image_normalized, (IMAGE_SIZE, IMAGE_SIZE))
  return image_resized, label
 
 
次に学習する際に全体のデータからどれだけを使うかみたいなのの指定
だと解釈してるが合ってるのかは不明
from_tensor_slices メソッドでデータセットを構築した模様
シャッフルのサイズがめっちゃでかいのでランダムになる度合いを
高く設定しているっぽいがメモリとトレード・オフの関係にありそう。
BATCH_SIZE = 32
train_data = tf.data.Dataset.from_tensor_slices*1, types: (tf.float32, tf.int32)>
<BatchDataset shapes: *2, types: (tf.float32, tf.int32)>
 
 
 
 
 

*1:tf.constant(train_filenames), tf.constant(train_labels))).map(_parse_fn).shuffle(buffer_size=10000).batch(BATCH_SIZE)


val_data = tf.data.Dataset.from_tensor_slices((tf.constant(val_filenames), tf.constant(val_labels))).map(_parse_fn).batch(BATCH_SIZE)
 ちなみに
print(train_data)
print(val_data)
したときの出力結果
 
<BatchDataset shapes: ((None, 96, 96, None), (None,

*2:None, 96, 96, None), (None,

アマプラ視聴録〜ふるさと〜

こぶしプロダクション第一回作品だそうです。

Prime Video

 

こぶしプロダクションがなにかも知らないけれども。

まず、BGMからすでにいいんですが、

が一文字ずつ出てくるのも良い。

ちなみに音楽は針生正男さんが担当されてる。

知らないですけれども。

 

そこから雪解け水の滴りやら、

川の流れやらを映しながら、

つくし、つくし、雪山、鳥、ふきのとう、花、花、川、大自然!大!自!然!

そして市川悦子さんのナレーションが始まるのである。

 

村を駆け抜けるトラックと工事の爆破音が響く中の村人たちの生活

こういう時代もあったんだなぁと思わせる風情がいい。

 

ある一家のボケたじいとその孫とのアマゴ釣りのくだりが非常にええ。

 

その後はなんか話だんだん重くなってきた。

 ボケたじいをどうするか問題と,ボケたじいの暴走。

それでもその後は沢を登ってやっぱり孫と二人でアマゴ釣り!

しかし,そこでじいに悲劇が!

 

 

 

 

続きというかエンディングはアマプラでどうぞ。